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

ShaderNameNazwa rejestrowanego cieniowania; przekaż ją do SetFillShader lub SetLineShader, aby malować siatką
PatchesTablica 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
BitsPerCoordinateLiczba bitów kwantyzacji współrzędnych punktu sterującego, od 1 do 32
BitsPerComponentLiczba bitów kwantyzacji na składnik koloru, od 1 do 16
BoundsX0, BoundsY0, BoundsX1, BoundsY1Prostokąt dekodowania odwzorowujący spakowane współrzędne punktów sterujących na przestrzeń współrzędnych cieniowania

Wartości zwracane

0Siatka nie została utworzona, ponieważ nie wybrano dokumentu, tablica płatów jest pusta albo parametr liczby bitów jest poza zakresem
1Siatkę 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');