NewRGBTensorPatchMesh
Sombreamento, gráficos
Descrição
Cria um sombreadura de malha de remendos de produto tensorial, tipo 7 de sombreadura PDF, e regista-a sob ShaderName em cor DeviceRGB. Cada remendo transporta dezasseis pontos de controlo, os quatro cantos do remendo, oito pontos de controlo de aresta e quatro pontos de controlo interiores, na ordem P1..P16, mais uma cor por canto. Os remendos são emitidos de forma independente, sem partilha de arestas
Sintaxe
Delphi
Function TPDFlib.NewRGBTensorPatchMesh(Const ShaderName: WideString;
Const Patches: Array Of TPLMeshPatchCorners;
BitsPerCoordinate, BitsPerComponent: Integer;
Const BoundsX0, BoundsY0, BoundsX1, BoundsY1: Double): Integer;Parâmetros
| ShaderName | Nome sob o qual a sombreadura é registada; passe-o a SetFillShader ou SetLineShader para pintar com a malha |
|---|---|
| Patches | Array de registos TPLMeshPatchCorners; PX/PY guardam as coordenadas dos pontos de controlo nas ranhuras 0..15 pela ordem P1..P16, com os pontos de controlo interiores P13..P16 nas ranhuras 12..15, e CR/CG/CB guardam as quatro cores de canto no intervalo de 0 a 1 |
| BitsPerCoordinate | Bits de quantização para as coordenadas dos pontos de controlo, entre 1 e 32 |
| BitsPerComponent | Bits de quantização por componente de cor, entre 1 e 16 |
| BoundsX0, BoundsY0, BoundsX1, BoundsY1 | Retângulo de descodificação que mapeia as coordenadas empacotadas dos pontos de controlo para o espaço de coordenadas da sombreadura |
Valores de retorno
| 0 | A malha não foi criada, porque nenhum documento está selecionado, o array de remendos está vazio ou um parâmetro de bits está fora do intervalo |
|---|---|
| 1 | A malha foi registada sob ShaderName |
Observações
As coordenadas seguem o sistema de origem no canto superior esquerdo da biblioteca e são traduzidas internamente (ISO 32000-1 §8.7.4.5.8). Os pontos de controlo interiores dão controlo mais fino sobre o fluxo de cor dentro de um remendo do que as curvas de fronteira bicúbicas de NewRGBCoonsPatchMesh
Exemplo
Patch:= Default(TPLMeshPatchCorners);
Patch.PX[0]:= 100; Patch.PY[0]:= 100; // P1 corner
Patch.PX[3]:= 300; Patch.PY[3]:= 100; // P4 corner
Patch.PX[6]:= 300; Patch.PY[6]:= 250; // P7 corner
Patch.PX[9]:= 100; Patch.PY[9]:= 250; // P10 corner
// Inner control points P13..P16 in slots 12..15
Patch.PX[12]:= 166; Patch.PY[12]:= 150;
Patch.PX[13]:= 233; Patch.PY[13]:= 150;
Patch.PX[14]:= 233; Patch.PY[14]:= 200;
Patch.PX[15]:= 166; Patch.PY[15]:= 200;
Patch.CR[0]:= 1; Patch.CG[0]:= 0; Patch.CB[0]:= 0;
Patch.CR[1]:= 0; Patch.CG[1]:= 0; Patch.CB[1]:= 1;
Patch.CR[2]:= 0; Patch.CG[2]:= 1; Patch.CB[2]:= 0;
Patch.CR[3]:= 1; Patch.CG[3]:= 1; Patch.CB[3]:= 0;
SetLength(Patches, 1);
Patches[0]:= Patch;
PDF.NewRGBTensorPatchMesh('tensor', Patches, 16, 8,
100, 100, 300, 250);
PDF.SetFillShader('tensor');