2012-12-28 2 views
3

이것은 내 처음 게시입니다. 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); 
} 

답변

0

나는 늙어하지만 난 수 있습니다 이 코드에서 잘못된 것을 찾을 수 없습니다. 귀하의 포인터가 모두 어디를 가리키고 있는지 확신합니까?

관련 문제