Model wird nicht richtig gelesen?



  • Hey Leute,
    mir wurde geraten mit dem MD2-Modelformat anzufangen. Hab ich nun soweit fertig. Nur zeigt er mir in einer Library folgendes an:

    /* verify block type */
                _ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));
    

    (aus der dbgdel.cpp) falls da einer was mit anfangen kann, als Fehlermeldung selber zeigt er eine Acces Vialation an und im Debugger folgendes:

    +		pHead	0x00b1ffe5 {pBlockHeaderNext=??? pBlockHeaderPrev=??? szFileName=??? ...}	_CrtMemBlockHeader *
    

    Und da kann ich dann drauf klicken und da kommen dann nochmal neue Instanzen und eine davon:

    szFileName	CXX0030: Error: expression cannot be evaluated
    

    (szFilename ist der Parameter der den Modelnamen angibt)

    Jetzt zum Loader:
    Im Header includiere ich die Heade und weise der Modeklasse ein Objekt und einen Zeiger zu, sprich:

    #include "MD2.h"
    CMD2Model pModel;
    CMD2Model* p_Model;
    #include "Texture.h"
    
    void CreateQuad(float _x, float _y);
    void DrawMD2Model(CMD2Model *pModel);
    

    Die Funktion, in der das Model errehnet und gerendert werden soll, wird außerhalb des Codes defniert:

    void DrawMD2Model(CMD2Model* pModel)
    {
        if(pModel==NULL)
    	{
    
        int nVertexNr = 0;
        int nTexCoordNr = 0;
    
        float nX,nY,nZ; 
    
        double dSkinResX = (double)pModel->m_pHeader->skinWidth;
        double dSkinResY = (double)pModel->m_pHeader->skinHeight;
    
    	glEnable(GL_TEXTURE_2D);
    	glBindTexture(GL_TEXTURE_2D, pModel->SkinAdr);
    
    	glBegin(GL_TRIANGLES);
    
    	for(int nTriangle=0; nTriangle < pModel->m_pHeader->numTriangles; nTriangle++)
    	{
    		for(int nVertex=0; nVertex < 3; nVertex++)
    		{
    
                nVertexNr = pModel->m_pTriangles[nTriangle].vertexIndices[nVertex];
                nTexCoordNr = pModel->m_pTriangles[nTriangle].textureIndices[nVertex];
    
    			nX = (float) pModel->m_pFrameData[0].pVertices[nVertexNr].vertex[0];
    			nX = (nX * pModel->m_pFrames[0].scale[0]) + pModel->m_pFrames[0].translate[0];
    
    			nY = (float) pModel->m_pFrameData[0].pVertices[nVertexNr].vertex[1];
    			nY = (nY * pModel->m_pFrames[0].scale[1]) + pModel->m_pFrames[0].translate[1];
    
    			nZ = (float) pModel->m_pFrameData[0].pVertices[nVertexNr].vertex[2];
    			nZ = (nZ * pModel->m_pFrames[0].scale[2]) + pModel->m_pFrames[0].translate[2];
    
    			double X = (double)pModel->m_pTexCoords[nTexCoordNr].s / dSkinResX;
    			double Y = (double)pModel->m_pTexCoords[nTexCoordNr].t / dSkinResY;
    
    			const double ScaleModel = 0.005;
    
    			glTexCoord2d(X,Y);
    			glVertex3d(nX * ScaleModel, nY * ScaleModel, nZ * ScaleModel);
    		}
    	}
    	glEnd();
    	}
    
    }
    

    So, das Model selber lade ich in der InitGL(). Hab rausgefundne das pModel in der 'DrawMD2'-Funktion gleich NULL ist. Komme jetzt nicht ganz da hinter wo das Problem liegt, sollte eigentlich keine Probleme geben. Ich danke vielmals im Voraus!



  • if(pModel==NULL) 
        { 
    [..]
        double dSkinResX = (double)pModel->m_pHeader->skinWidth;
    

    denk nochmal scharf nach



  • Ohherje ist mir das peinlich...(:
    Erstmal vielen Dank für die schnelle Antwort 'Shade Of Mine'! Sieht jetzt so
    aus:

    if(pModel==NULL)
       {
    	   MessageBox(NULL,"pModel==NULL","Modelloader",MB_OK);
       }
       else
       { 
         nVertex=...
       }
    

    Jetzt zeigt er mir schon mehrere Stellen im Debugger an, sehen aber eigentlich alle OK aus:

    nVertex	0x00000000	int
                    nVertexNr 0x00000000	int
    

    Ist auch gut so, weil nVertex&nVertexNr mit einer '0' deklariert wurden.
    Nächste:

    +		pModel	0x004bdd44 class CMD2Model pModel {SkinAdr=0x00000002 m_pHeader=0x003f59a8 m_pSkins=0x000006a9 ...}	CMD2Model *
    

    Sieht auch gut aus, wenn ich darauf klicke und dann auf 'm_pTriangles' kann ich nochmal 'vertexIndices' anklicken und da stehen dann alle 3 Elemente die in der Modelklasse deklariert wurden....allerdings steht bei jedem Element folgendes:

    [0x0]	CXX0030: Error: expression cannot be evaluated	
    		[0x1]	CXX0030: Error: expression cannot be evaluated	
    		[0x2]	CXX0030: Error: expression cannot be evaluated
    

    Woran kann das liegen?
    An der Deklarierung kann's auch nicht liegen:

    struct MD2_Triangle
       {
    	   short vertexIndices[3];
    	   short textureIndices[3];
       };
    


  • Hm,...



  • Hab jetzt etwas Hilfe durch 'Shade Of Mine' erringen können, danke sehr!
    Jetzt gibt es noh ein Probelm und zwar kann er die 3 Elemente von
    'vertexIndices' nicht finden, bzw. möchte er auf Speicher zugrifen der im
    RAM nicht reserviert wurde, dass Problem ist, dass es normal ein Problem
    geben dürfte weil alles richtig deklariert wurde, siehe hier:

    struct MD2_Triangle
       {
    	   short vertexIndices[3];
    	   short textureIndices[3];
       };
    

    Ansonsten benutze ich diesen Teil nirgendswo, wesrum es eben keine Probleme
    geben dürfte, aber hier kann der Fehler ja nicht liegen, vielleicht hat ja
    noch einer ein guten Tipp o.Ä. ich danke vielmals im Voraus!


Anmelden zum Antworten