在 OpenGL 中加载 3D 模型
我一直在尝试在 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 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
更多
发布评论
评论(1)
您可能会耗尽卡上的内存
无论如何,使用旧式 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