Загрузка 3d модели в OpenGL - PullRequest
0 голосов
/ 24 января 2012

Я пытался загрузить 3D-модель в OpenGL.Я успешно загрузил небольшую модель с 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.почему это так?

1 Ответ

0 голосов
/ 24 января 2012

Возможно, вам не хватает памяти на карте

В любом случае отобразите модель треугольника 350 КБ, используя цикл glVertex в старом стиле, и особенно изменение цвета в каждой вершине будет очень-очень медленным (как внесколько секунд на кадр)

Прежде чем вы сделаете гораздо больше, я хотел бы узнать об объектах буфера вершин.Вам также может понадобиться изменить порядок треугольников модели, чтобы свести к минимуму количество изменений цвета

...