이것은 내 처음 게시입니다. ASSIMP라는이 3D 모델 로딩 라이브러리에이 문제가 있습니다. 나는 샘플 Direct3d9 애플 리케이션에 그것을 통합하려고합니다. 그리고 그렇게 잘되지 않습니다. 나는 경험 많은 C++ 프로그래머이기 때문에 너무 많은 번거 로움을 덜어 주어서는 안된다. :). 그래서 저는 과거에 여러 d3d9 앱을 만들고 수동 프리미티브를 렌더링했습니다. 하지만 지금은 ASSIMP로로드 된 obj 모델을 렌더링하려고합니다. 내가 그것을 렌더링하려고하면 아무것도 렌더링되지 않습니다. 이것은 매우 이상합니다. 하나의 폴리이 렌더링되지 않았습니다. 이것은 매우 실망 스럽지만 1 주일 만에이 한 가지 문제를 해결하고 Google 검색 결과를 반환하는 데 아무런 도움이되지 않았습니다. 너희들은 솔직히 내 마지막 희망 축하해. 좋아, 여기 내 코드가있다. 꽤 봐 주셔서 내가 뭘 잘못하고 있는지 이해하도록 도와주세요. 당신이 링크의 알고있는 경우도 Directx9와 ASSIMP의 예 :(에만 OpenGL을 보여줍니다 그 또한 구글로 평가 될 것입니다 될 수있다. 어떤 도움이 많이 주시면 감사합니다 감사합니다 :)DirectX9에 ASSIMP를 사용하여 .obj 모델로드
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);
}