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 计算正交坐标。

要求

要求
标头
D3DX9Mesh.h

D3dx9.lib

另请参阅

网格函数

D3DXCompute TangentFrameEx

D3DX TANGENT