assimp批量转模型_在DirectX9的加载的obj模型ASSIMP(Load a .obj model with AS

这是我第一次发布。 我有叫ASSIMP这个3D模型库加载这个问题。 我想它在一个样本的Direct3D9应用程序集成。 它是不会这么好。 我是一名经验丰富的C ++程序员,所以它不应该花太多的麻烦帮我:)。 所以我在过去几次D3D9应用程序和渲染手动元。 但现在我试图渲染加载ASSIMP的OBJ模型。 当我尝试呈现它,没有什么是在所有的渲染。 这是很奇怪的,甚至没有一种聚呈现。 这是非常令人沮丧,因为我花了1周试图解决这一问题,并搜索在谷歌返回任何有用的结果。 你们是说实话我最后的希望笑。 好了,所以这里是我的代码。 漂亮的请看看,并帮助我理解我在做什么错。 此外,如果你知道一个链接的其中DirectX9的ASSIMP例子可能是也将理解,因为谷歌只显示OpenGL的:(。任何帮助将非常感激谢谢:)

bool Mesh::LoadMesh(const std::string& Filename)

{

Assimp::Importer Importer;

const aiScene *pScene = NULL;

const aiMesh *pMesh = NULL;

pScene = Importer.ReadFile(Filename.c_str(), aiProcess_Triangulate | aiProcess_ConvertToLeftHanded | aiProcess_ValidateDataStructure | aiProcess_FindInvalidData);

if (!pScene)

{

printf("Error parsing '%s': '%s'\n", Filename.c_str(), Importer.GetErrorString());

return false;

}

pMesh = pScene->mMeshes[0];

if (!pMesh)

{

printf("Error Finding Model In file. Did you export an empty scene?");

return false;

}

for (unsigned int i = 0; i < pMesh->mNumFaces; i++)

{

if (pMesh->mFaces[i].mNumIndices == 3)

{

m_NumIndices = m_NumIndices + 3;

}

else

{

printf("Error parsing Faces. Try to Re-Export model from 3d package!");

return false;

}

}

m_NumFaces = pMesh->mNumFaces;

m_NumVertecies = pMesh->mNumVertices;

ZeroMemory(&m_pVB, sizeof(m_pVB));

m_pRenderDevice->CreateVertexBuffer(sizeof(Vertex) * m_NumVertecies, 0, VertexFVF, D3DPOOL_DEFAULT, &m_pVB, NULL);

m_pVB->Lock(0, 0, (void**)&m_pVertecies, 0);

for (int i = 0; i < pMesh->mNumVertices; i++)

{

Vertex *pvertex = new Vertex(D3DXVECTOR3(pMesh->mVertices[i].x, pMesh->mVertices[i].y, pMesh->mVertices[i].z), D3DXVECTOR2(pMesh->mTextureCoords[0][i].x, pMesh->mTextureCoords[0][i].y), D3DXVECTOR3(pMesh->mNormals[i].x, pMesh->mNormals[i].y, pMesh->mNormals[i].z));

m_pVertecies[i] = pvertex;

}

m_pVB->Unlock();

return true;

}

void Mesh::Render()

{

m_pRenderDevice->SetStreamSource(0, m_pVB, 0, sizeof(Vertex));

m_pRenderDevice->SetFVF(VertexFVF);

m_pRenderDevice->DrawPrimitive(D3DPT_TRIANGLELIST, 0, m_NumFaces);

}

void Render()

{

D3DCOLOR Color = D3DCOLOR_ARGB(255, 0, 0, 255);

//Clear the Z and Back buffers

g_pRenderDevice->Clear(0, NULL, D3DCLEAR_TARGET | D3DCLEAR_ZBUFFER, Color, 1.0f, 0);

g_pRenderDevice->BeginScene();

InitializeViewMatrix();

D3DXMATRIX Scale;

D3DXMatrixScaling(&Scale, CameraScaleX, CameraScaleY, CameraScaleZ);

D3DXMATRIX Rotation;

CameraRotX += 0.025;

D3DXMatrixRotationYawPitchRoll(&Rotation, CameraRotX, CameraRotY, CameraRotZ);

g_pRenderDevice->SetTransform(D3DTS_WORLD, &D3DXMATRIX(Scale * Rotation));

if (pMesh)

{

pMesh->Render();

}

g_pRenderDevice->EndScene();

g_pRenderDevice->Present(NULL, NULL, NULL, NULL);

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值