在 OpenGL 中加载 3D 模型

发布于 2024-12-28 18:10:48 字数 2081 浏览 4 评论 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 格式。 为什么会这样呢?

i have been trying to load a 3d model in opengl. i have been successful in loading a small model which has 2000 vertices now i am trying to load a model which has 350000 vertices using the same loader but it simply does not show up.
i am using the loader from http://www.morrowland.com/apron/tut_gl.php
and this is the function where i render the 3ds model

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

}

i am using 3ds format.
why is this so?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

冷弦 2025-01-04 18:10:48

您可能会耗尽卡上的内存

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

)更多我会了解顶点缓冲区对象。您可能还需要重新排序模型三角形以最大程度地减少颜色变化的次数

You may be running out of memory on the card

Anyway display a 350K triangle model using old style glVertex loop, and especially changing the colour on each vertex is going to be very-very slow (as in several seconds per frame)

Before you do much more I would learn about vertex buffer objects. You may also need to reorder your model triangles to minimize the number of colour changes

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文