D3DXVec4CatmullRom 函数 (D3DX10Math.h)
注意
D3DX10 实用工具库已弃用。 建议改用 DirectXMath 。
使用指定的 4D 向量执行Catmull-Rom内插。
语法
D3DXVECTOR4* D3DXVec4CatmullRom(
_Inout_ D3DXVECTOR4 *pOut,
_In_ const D3DXVECTOR4 *pV0,
_In_ const D3DXVECTOR4 *pV1,
_In_ const D3DXVECTOR4 *pV2,
_In_ const D3DXVECTOR4 *pV3,
_In_ FLOAT s
);
参数
-
pOut [in, out]
-
类型: D3DXVECTOR4*
指向操作结果的 D3DXVECTOR4 的指针。
-
pV0 [in]
-
类型: const D3DXVECTOR4*
指向源 D3DXVECTOR4 结构(位置向量)的指针。
-
pV1 [in]
-
类型: const D3DXVECTOR4*
指向源 D3DXVECTOR4 结构(位置向量)的指针。
-
pV2 [in]
-
类型: const D3DXVECTOR4*
指向源 D3DXVECTOR4 结构(位置向量)的指针。
-
pV3 [in]
-
类型: const D3DXVECTOR4*
指向源 D3DXVECTOR4 结构(位置向量)的指针。
-
s [in]
-
类型: FLOAT
加权系数。 请参阅“备注”。
返回值
类型: D3DXVECTOR4*
指向 D3DXVECTOR4 结构的指针,该结构是Catmull-Rom内插的结果。
备注
给定 p1、p2、p3、p4) (四个点,查找函数 Q (s) ,以便:
Q(s) is a cubic function.
Q(s) interpolates between p2 and p3 as s ranges from 0 to 1.
Q(s) is parallel to the line joining p1 to p3 when s is 0.
Q(s) is parallel to the line joining p2 to p4 when s is 1.
Catmull-Rom样条可以通过设置从 Hermite 样条派生:
v1 = p2
v2 = p3
t1 = (p3 - p1) / 2
t2 = (p4 - p2) / 2
其中:
v1 是 pV0 的内容。
pV1 内容中的 v2。
p3 是 pV2 的内容。
p4 是 pV3 的内容。
使用 Hermite 样条公式:
Q(s) = (2s3 - 3s2 + 1)v1 + (-2s3 + 3s2)v2 + (s3 - 2s2 + s)t1 + (s3 - s2)t2
并替换 v1、v2、t1、t2 生成:
Q(s) = (2s3 - 3s2 + 1)p2 + (-2s3 + 3s2)p3 + (s3 - 2s2 + s)(p3 - p1) / 2 + (s3 - s2)(p4 - p2) / 2
这可以重新排列为:
Q(s) = [(-s3 + 2s2 - s)p1 + (3s3 - 5s2 + 2)p2 + (-3s3 + 4s2 + s)p3 + (s3 - s2)p4] / 2
要求
要求 | 值 |
---|---|
标头 |
|
另请参阅