我正在尝试为DirectX网格制作法线贴图着色器,并遵循学校的一些说明,它告诉我,我的顶点结构必须包含Pos的Vec3和法线,双法线和3x3 Martix。切线,但我不知道如何得到双法线和切线。我引用了我的书,该书告诉我使用D3DXComputeTangentFrameEx函数,但是我所有的网格都是D3DXFRAME对象,而不是ID3DXMesh *。

谁能帮我吗?

我还想补充一点,我已经有了pos和法线 vector 。

最佳答案

如果查看D3DXFRAME,则可以找到pMeshContainer类型的MeshData成员,其中D3DXMESHCONTAINER*类型的pMesh成员,而ID3DXMesh*类型的Type == D3DXMESHTYPE_MESH成员,但是仅当ojit_code时有效。

例:

{
    D3DXFRAME Frame;

    ID3DXMesh* pMesh;

    if( Frame.pMeshContainer->MeshData.Type == D3DXMESHTYPE_MESH )
        pMesh = Frame.pMeshContainer->MeshData.pMesh;
    else
        pMesh = 0;  // model is ID3DXPatchMesh type
}

10-06 10:22