Laden Sie ein OBJ-Modell mit ASSIMP in DirectX9

Dies ist mein erstes Mal Posting. Ich habe dieses Problem mit dieser 3D-Modell-Ladebibliothek namens ASSIMP. Ich versuche, es in eine Beispiel-Direct3d9-App zu integrieren. und es läuft nicht so gut. Ich bin ein erfahrener C ++ - Programmierer, daher sollte es nicht allzu mühsam sein, mir zu helfen :). So habe ich in der Vergangenheit mehrere d3d9-Apps erstellt und manuelle Grundelemente gerendert. aber jetzt versuche ich, ein mit ASSIMP geladenes obj-Modell zu rendern. Wenn ich versuche, es zu rendern, wird NICHTS gerendert. Das ist sehr seltsam, es wird nicht einmal ein Poly gerendert. das ist SEHR frustrierend, da ich 1 Woche lang versucht habe, dieses eine Problem zu beheben, und die Suche auf Google keine nützlichen Ergebnisse liefert. ihr seid ehrlich meine letzte hoffnung lol. Ok, hier ist mein Code. Bitte schauen Sie mal rein und helfen Sie mir zu verstehen, was ich falsch mache. Auch wenn Sie einen Link kennen, auf dem sich ein DirectX9-ASSIMP-Beispiel befindet, wäre dies sehr zu begrüßen, da nur Google OpenGL anzeigt :(. Jede Hilfe wird sehr geschätzt, danke :)

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);
}

Antworten auf die Frage(1)

Ihre Antwort auf die Frage