NewRGBTensorPatchMesh
着色、图形
说明
创建张量积拼片网格着色(PDF 着色类型 7),并以 DeviceRGB 颜色在 ShaderName 下注册。每个拼片携带十六个控制点,即四个拼片角点、八个边控制点和四个内部控制点,按 P1..P16 顺序排列,并且每个角点有一个颜色。拼片会独立输出,不共享边
语法
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 的四个角点颜色 |
| BitsPerCoordinate | 控制点坐标的量化位数,介于 1 和 32 之间 |
| BitsPerComponent | 每个颜色分量的量化位数,介于 1 和 16 之间 |
| BoundsX0, BoundsY0, BoundsX1, BoundsY1 | 将打包控制点坐标映射到着色坐标空间的解码矩形 |
返回值
| 0 | 未创建网格,因为未选择文档、拼片数组为空或某个 bits 参数超出范围 |
|---|---|
| 1 | 网格已在 ShaderName 下注册 |
备注
坐标遵循库的左上角原点系统,并在内部转换 (ISO 32000-1 §8.7.4.5.8)。内部控制点对拼片内颜色流动的控制比 NewRGBCoonsPatchMesh 的双三次边界曲线更精细
示例
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');