D3DXCompute TangentFrame 函数
计算网格的切线、二元和法线向量。
HRESULT D3DXComputeTangentFrame(
_In_ ID3DXMesh *pMesh,
_In_ DWORD dwOptions
);
-
pMesh [in]
-
类型: ID3DXMesh*
指向输入 ID3DXMesh 网格对象的指针。
-
dwOptions [in]
-
类型: DWORD
一个或多个 D3DX TANGENT 标志的组合。
使用 NULL 指定以下选项:
- 按角度(以弧度为单位)对法向量长度进行加权,由离开顶点的两条边进行子化。
- 从 UV 纹理坐标计算正交笛卡尔坐标。
- 纹理不采用 U 或 V 方向包装
- 与纹理坐标相关的部分导数已规范化。
- 顶点按逆时针方向排列,围绕每个三角形。
- 使用输入网格中已存在的每顶点法向量。
- 结果将存储在原始输入网格中。 如果需要创建新顶点,函数将失败。
类型: HRESULT
如果函数成功,则返回值S_OK。 如果函数失败,则返回值可以是下列值之一:D3DERR_INVALIDCALL、D3DXERR_INVALIDDATA、E_OUTOFMEMORY。
此函数只需使用以下输入参数调用 D3DXComputeTangentFrameEx :
D3DXComputeTangentFrameEx(pMesh, D3DDECLUSAGE_TEXCOORD, 0,
D3DDECLUSAGE_BINORMAL, 0, D3DDECLUSAGE_TANGENT, 0,
D3DDECLUSAGE_NORMAL, 0,
dwOptions | D3DXTANGENT_GENERATE_IN_PLACE,
NULL, 0.01f, 0.25f, 0.01f, NULL, NULL);
通过对边缘进行分组和拆分顶点,可以根据需要处理奇点。 如果需要拆分任何顶点,该函数将失败。 每个顶点处计算的法线向量始终被规范化为具有单位长度。
计算正交笛卡尔坐标的最可靠解决方案是不设置D3DXTANGENT_ORTHOGONALIZE_FROM_U和D3DXTANGENT_ORTHOGONALIZE_FROM_V标志,以便从两个 UV 纹理坐标中计算正交坐标。 但是,在这种情况下,如果 U 或 V 为零,则该函数将分别使用 D3DXTANGENT_ORTHOGONALIZE_FROM_V 或 D3DXTANGENT_ORTHOGONALIZE_FROM_U 计算正交坐标。
要求 | 值 |
---|---|
标头 |
|
库 |
|