NewRGBTensorPatchMesh
Cieniowanie, Grafika
Opis
Tworzy cieniowanie siatkowe płata tensorowego, typ cieniowania PDF 7, i rejestruje je pod nazwą ShaderName w kolorze DeviceRGB. Każdy płat zawiera szesnaście punktów sterujących — cztery narożniki płata, osiem punktów sterujących krawędzi i cztery wewnętrzne punkty sterujące — w kolejności P1..P16 oraz po jednym kolorze na narożnik. Płaty są emitowane niezależnie bez współdzielenia krawędzi
Składnia
Delphi
Function TPDFlib.NewRGBTensorPatchMesh(Const ShaderName: WideString;
Const Patches: Array Of TPLMeshPatchCorners;
BitsPerCoordinate, BitsPerComponent: Integer;
Const BoundsX0, BoundsY0, BoundsX1, BoundsY1: Double): Integer;Parametry
| ShaderName | Nazwa rejestrowanego cieniowania; przekaż ją do SetFillShader lub SetLineShader, aby malować siatką |
|---|---|
| Patches | Tablica rekordów TPLMeshPatchCorners; PX/PY przechowują współrzędne punktów sterujących P1..P16 w miejscach 0..15, w tym wewnętrzne punkty sterujące P13..P16 w miejscach 12..15, a CR/CG/CB przechowują cztery kolory narożników w zakresie od 0 do 1 |
| BitsPerCoordinate | Liczba bitów kwantyzacji współrzędnych punktu sterującego, od 1 do 32 |
| BitsPerComponent | Liczba bitów kwantyzacji na składnik koloru, od 1 do 16 |
| BoundsX0, BoundsY0, BoundsX1, BoundsY1 | Prostokąt dekodowania odwzorowujący spakowane współrzędne punktów sterujących na przestrzeń współrzędnych cieniowania |
Wartości zwracane
| 0 | Siatka nie została utworzona, ponieważ nie wybrano dokumentu, tablica płatów jest pusta albo parametr liczby bitów jest poza zakresem |
|---|---|
| 1 | Siatkę zarejestrowano pod nazwą ShaderName |
Uwagi
Współrzędne są zgodne z układem biblioteki o początku w lewym górnym rogu i są wewnętrznie przekształcane (ISO 32000-1 §8.7.4.5.8). Wewnętrzne punkty sterujące zapewniają dokładniejszą kontrolę przepływu koloru wewnątrz płata niż dwusześcienne krzywe graniczne NewRGBCoonsPatchMesh
Przykład
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');