0

我一直在尝试在 opengl 中加载 3d 模型。我已经成功加载了一个具有 2000 个顶点的小模型,现在我正在尝试使用相同的加载器加载一个具有 350000 个顶点的模型,但它根本不显示。我正在使用来自http://www.morrowland.com/apron/tut_gl.php的加载器 ,这是我渲染 3ds 模型的函数

 void C3dsLoader::Render_3ds()
{

for(int i = 0; i < m3DModel.numOfObjects; i++)
{

    if(m3DModel.pObject.size() <= 0) break;                     

    t3DObject *pObject = &m3DModel.pObject[i];                  

    if(pObject->bHasTexture)                                    
    {                                   
        glEnable(GL_TEXTURE_2D);                                

        glColor3ub(255, 255, 255);                              

        glBindTexture(GL_TEXTURE_2D, TextureArray3ds[pObject->materialID]); 
    } 
    else 
    {
        glDisable(GL_TEXTURE_2D);                               

        glColor3ub(255, 255, 255);                              
    }

    glBegin(GL_TRIANGLES);                                      

    for(int j = 0; j < pObject->numOfFaces; j++)
    {

        for(int whichVertex = 0; whichVertex < 3; whichVertex++)
        {
            int index = pObject->pFaces[j].vertIndex[whichVertex];

            glNormal3f(pObject->pNormals[ index ].x, pObject->pNormals[ index ].y, pObject->pNormals[ index ].z);

            if(pObject->bHasTexture) {

                if(pObject->pTexVerts) {
                    glTexCoord2f(pObject->pTexVerts[ index ].x, pObject->pTexVerts[ index ].y);
                }
            } else {

                if(m3DModel.pMaterials.size() < pObject->materialID) 
                {
                    BYTE *pColor = m3DModel.pMaterials[pObject->materialID].color;

                    glColor3ub(pColor[0], pColor[1], pColor[2]);
                }
            }

            glVertex3f(pObject->pVerts[ index ].x, pObject->pVerts[ index ].y, pObject->pVerts[ index ].z);
        }
    }

    glEnd();
}

}

我正在使用 3ds 格式。为什么会这样?

4

1 回答 1

-1

卡上的内存可能用完了

无论如何,使用旧式 glVertex 循环显示 350K 三角形模型,尤其是更改每个顶点的颜色会非常非常慢(如每帧几秒钟)

在你做更多之前,我会了解顶点缓冲区对象。您可能还需要重新排列模型三角形以尽量减少颜色变化的次数

于 2012-01-24T19:24:53.770 回答