带法线贴图的Binormal和Tangent

Binormal and Tangent with Normal Mapping

本文关键字:Binormal Tangent      更新时间:2023-10-16

我正在尝试为我的DirectX网格制作一个法线贴图着色器,在遵循学校的一些笔记时,它告诉我需要我的顶点结构包含用于Pos的Vec3和用于法线、binormal和切线的3x3 Martix,但我不知道如何获得binormal与切线。我参考了我的书,书中告诉我使用D3DXComputeTangentFrameEx函数,但我所有的网格都是D3DXFRAME对象,而不是ID3DXMesh*。。

有人能帮我吗?

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

如果你查看D3DXFRAME,你可以找到pMeshContainer成员,它是D3DXMESHCONTAINER*类型,它有D3DXMESHDATA类型的MeshData成员,它有ID3DXMesh*类型的pMesh成员,但它只有在Type == D3DXMESHTYPE_MESH时才有效。

示例:

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