NewRGBTensorPatchMesh

Stínování, grafika

Popis

Vytváří stínování tenzorového součinu patch mesh, PDF shading type 7, a registruje jej pod ShaderName v barvě DeviceRGB. Každá patch nese šestnáct řídicích bodů, čtyři rohy patche, osm hraničních řídicích bodů a čtyři vnitřní řídicí body, v pořadí P1..P16 plus jednu barvu na roh. Patche se vysílají nezávisle bez sdílení hran

Syntaxe

Delphi

Function TPDFlib.NewRGBTensorPatchMesh(Const ShaderName: WideString;
  Const Patches: Array Of TPLMeshPatchCorners;
  BitsPerCoordinate, BitsPerComponent: Integer;
  Const BoundsX0, BoundsY0, BoundsX1, BoundsY1: Double): Integer;

Parametry

ShaderNameNázev, pod kterým je shader registrován; předejte ho funkcím SetFillShader nebo SetLineShader, chcete-li kreslit pomocí mesh
PatchesPole záznamů TPLMeshPatchCorners; PX/PY drží souřadnice řídicích bodů ve slotech 0..15 pro P1..P16, přičemž vnitřní řídicí body P13..P16 jsou ve slotech 12..15, a CR/CG/CB drží čtyři rohové barvy v rozsahu 0 až 1
BitsPerCoordinateKvantizační bity pro souřadnice řídicích bodů, v rozsahu 1 až 32
BitsPerComponentKvantizační bity na barevnou složku, v rozsahu 1 až 16
BoundsX0, BoundsY0, BoundsX1, BoundsY1Dekódovací obdélník, který mapuje zabaleny souřadnice řídicích bodů do souřadného prostu stínování

Návratové hodnoty

0Mesh nebyl vytvořen, protože není vybrán žádný dokument, pole patch je prázdné, nebo parametr bits je mimo rozsah
1Mesh byl zaregistrován pod názvem ShaderName

Poznámky

Souřadnice sledují systém knihovny s původem vlevo nahoře a interně se překládají (ISO 32000-1 §8.7.4.5.8). Vnitřní řídicí body dávají jemnější kontrolu nad tokem barvy uvnitř patche než bikubické hraniční křivky NewRGBCoonsPatchMesh

Příklad

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');