NewRGBTensorPatchMesh
シェーディング, グラフィック
説明
テンソル積パッチメッシュシェーディング(PDFシェーディングタイプ7)を作成し、ShaderNameの名前でDeviceRGB色として登録します。各パッチは16個の制御点、すなわち4つのパッチコーナー、8つのエッジ制御点、4つの内部制御点をP1..P16の順序で持ち、コーナーごとに1つの色が付きます。パッチは辺を共有せず、独立に出力されます
構文
Delphi
Function TPDFlib.NewRGBTensorPatchMesh(Const ShaderName: WideString;
Const Patches: Array Of TPLMeshPatchCorners;
BitsPerCoordinate, BitsPerComponent: Integer;
Const BoundsX0, BoundsY0, BoundsX1, BoundsY1: Double): Integer;パラメータ
| ShaderName | シェーダーを登録する名前。SetFillShader または SetLineShader に渡してメッシュを描画します |
|---|---|
| Patches | TPLMeshPatchCornersレコードの配列。PX/PYはP1..P16のスロット0..15に制御点座標を保持し、内部制御点P13..P16はスロット12..15に配置し、CR/CG/CBは0から1の範囲の4つのコーナー色を保持します |
| BitsPerCoordinate | 制御点座標の量子化ビット数。1から32の間で指定します |
| BitsPerComponent | 色成分ごとの量子化ビット数。1から16の間で指定します |
| BoundsX0, BoundsY0, BoundsX1, BoundsY1 | パックされた制御点座標をシェーディング座標空間へ写像するデコード矩形 |
戻り値
| 0 | メッシュは作成されませんでした。ドキュメントが選択されていない、パッチ配列が空、またはビットパラメータが範囲外です |
|---|---|
| 1 | メッシュはShaderNameの名前で登録されました |
備考
座標はライブラリの左上原点系に従い、内部で変換されます(ISO 32000-1 §8.7.4.5.8)。内部制御点により、NewRGBCoonsPatchMesh の双3次境界曲線よりもパッチ内部の色の流れを細かく制御できます
例
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');