D3D,Vertex From Mesh

时间:2017-06-08 12:19:52

标签: mesh direct3d

通过使用D3DXLoadMeshFromX,我可以加载网格的子集,材质,纹理......所以我成功了Draw Mesh。

我想知道的是Mesh的顶点信息(用于拾取)。

我的代码是..

s2_list
  [1] "S2A_20150706T105351Z_31UFS_NDVI_10M_V008.tif" "S2A_20150716T105024Z_31UFS_NDVI_10M_V008.tif"
  [3] "S2A_20150726T105024Z_31UFS_NDVI_10M_V008.tif" "S2A_20150805T105026Z_31UFS_NDVI_10M_V008.tif"
  [5] "S2A_20150812T104021Z_31UFS_NDVI_10M_V008.tif" "S2A_20150815T105627Z_31UFS_NDVI_10M_V008.tif"
  [7] "S2A_20150822T104035Z_31UFS_NDVI_10M_V008.tif" "S2A_20150825T105041Z_31UFS_NDVI_10M_V008.tif"
  [9] "S2A_20150904T105042Z_31UFS_NDVI_10M_V008.tif" "S2A_20150911T104038Z_31UFS_NDVI_10M_V008.tif"

然后我想知道像Vertex这样的Vtx信息,但是Vtx是无效的指针...... 如果我知道该网格的结构我可能知道顶点信息,但我不知道

如果我的回答过于模糊,我很抱歉。

1 个答案:

答案 0 :(得分:1)

传统的DirectX SDK在Samples\C++\Direct3D\Pick中的示例中介绍了这一点。

您必须使用CloneMeshFVF重新格式化顶点数据布局,并且需要确保指定D3DXMESH_VB_MANAGEDD3DXMESH_VB_SYSTEMMEM,以便实际锁定生成的VB。

   LPD3DXMESH pMesh;

    g_Mesh.GetMesh()->CloneMeshFVF( D3DXMESH_MANAGED,
                                    g_Mesh.GetMesh()->GetFVF(), pD3Device, &pMesh );

    LPDIRECT3DVERTEXBUFFER9 pVB;
    LPDIRECT3DINDEXBUFFER9 pIB;

    pMesh->GetVertexBuffer( &pVB );
    pMesh->GetIndexBuffer( &pIB );

    WORD* pIndices;
    D3DVERTEX* pVertices;

    pIB->Lock( 0, 0, ( void** )&pIndices, 0 );
    pVB->Lock( 0, 0, ( void** )&pVertices, 0 );

请记住,拾取使用顶点数据的CPU内存副本,而渲染使用视频内存副本。在实时应用程序中,您通常不会使用渲染模型的完全复杂性来进行冲突,而是使用简化的碰撞模型,您永远不需要渲染并只保留在内存中。