gpt4 book ai didi

c++ - ID3DXBaseMesh::CloneMeshFVF 返回 D3DERR_INVALIDCALL

转载 作者:太空宇宙 更新时间:2023-11-04 14:14:05 24 4
gpt4 key购买 nike

我正在尝试从 directx 9 中的 .x 文件加载网格并将其克隆为另一种 FVF 格式以获取我想要的顶点。

LPD3DXMESH pMesh;
DWORD numMaterials;
LPD3DXBUFFER pMaterialBuffer;
HRESULT hr = D3DXLoadMeshFromX( file, D3DXMESH_SYSTEMMEM, pDevice, NULL, &pMaterialBuffer, NULL, &numMaterials, &pMesh ); // Loads just fine, I can even render it

LPD3DXMESH clone;
pMesh ->CloneMeshFVF(D3DXMESH_SYSTEMMEM, D3DFVF_XYZ, pDevice, &clone); // Trying to get only the xyz data out

在克隆阶段我得到一个 D3DERR_INVALIDCALL 错误。但是,我认为我的任何论点都没有错。

我试图由此实现的是最终从我想要的缓冲区中获取所有顶点数据,而不依赖于我正在加载的 .x 文件的类型。

typedef struct VERTEX_TYPE 
{
float position[3];
} VERTEX;

void* pTemp;
VERTEX* pVertexData;

DWORD nNumVerts = mesh->GetNumVertices();
DWORD nSizeVerts = mesh->GetNumBytesPerVertex();
DWORD nNumFaces = mesh->GetNumFaces();


pVertexData = new VERTEX[nNumFaces * 3];
mesh->LockVertexBuffer(D3DLOCK_READONLY, &pTemp);
memcpy(pVertexData, pTemp, sizeof(VERTEX)*nNumVerts);
mesh->UnlockVertexBuffer();

关于我哪里出错的任何帮助?

最佳答案

我想通了。问题是我正在创建一个 directX9 EX 设备。我不确定为什么它需要一个普通设备而不是 EX 设备,但这修复了我的错误并且一切正常。

关于c++ - ID3DXBaseMesh::CloneMeshFVF 返回 D3DERR_INVALIDCALL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12627785/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com