关于OpenGL纹理的问题

swxlion 2004-11-30 11:10:19
我现在在用VC 6.0 + sp6写一OpenGL程序,读取并绘制OBJ模型。为了方便调试,我纹理和模型的读取与绘制是分开调试的。在分开的时候,一切正常(读取和绘制模型:不论模型是简单的球体、立方体,还是整个的游戏场景;读取和绘制纹理:不论纹理是一张,还是70几张(贴在300多个点的球体上)),可一合起来,除了特定几个模型外,程序不是没有响应,就是崩溃,并且把ATI的显卡驱动冲毁(用Debug查看,说ati...xxx.dll崩溃。...代表的内容忘了记下来了。然后所有显示,轻者与滚动相关的部分花屏,重者直至关机(画面没有反应,靠记忆操作^_^b),作任何操作画面均无反应,一直显示程序崩溃时的画面)。
纹理的读取我是这样处理的:
glPixelStorei( GL_UNPACK_ALIGNMENT, 1 );
ubTextureBuffer = new GLubyte[*w**h**bit]; // 建立图像缓冲

if( LoadBMP24( path, ubTextureBuffer ) == -1 ) return -1;

glGenTextures( 1, &paTextureName[uiTextureSN] );
glBindTexture( GL_TEXTURE_2D, paTextureName[uiTextureSN] );

glTexImage2D( GL_TEXTURE_2D, 0, 3, *w, *h, 0, GL_RGB, GL_UNSIGNED_BYTE, ubTextureBuffer );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_REPEAT );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR );
glTexParameteri( GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR );
glTexEnvf( GL_TEXTURE_ENV, GL_TEXTURE_ENV_MODE, GL_DECAL );

delete [] ubTextureBuffer;
以此往复,直到所有纹理全部读取完成,然后读取OBJ模型。
(因为OBJ文件格式很简单,读取代码在此略过……)
贴纹理相关操作:
glColor3fv( paMat->faAmbientColor );
glMaterialfv( GL_FRONT, GL_AMBIENT, paMat->faAmbientColor );
glMaterialfv( GL_FRONT, GL_DIFFUSE, paMat->faDiffuseColor );
glMaterialfv( GL_FRONT, GL_SPECULAR, paMat->faSpecularColor );
glMaterialf( GL_FRONT, GL_SHININESS, paMat->fShininess );
glMaterialfv( GL_FRONT, GL_EMISSION, paMat->faAmbientColor );

glBindTexture( GL_TEXTURE_2D, 0 ); // 取消和上一次使用的纹理的关联

glBindTexture( GL_TEXTURE_2D, paTextureName[paTexIdx->uiTextureID] );

glBegin( GL_TRIANGLES );
glTexCoord2fv( &paMod->pfTextureArray[ ( paMod->puiFaceArray[j*9+1]-1 )*2 ] );
glNormal3fv( &paMod->pfNormalArray[ ( paMod->puiFaceArray[j*9+2]-1 )*3 ] );
glVertex3fv( &paMod->pfVertexArray[ ( paMod->puiFaceArray[j*9+0]-1 )*3 ] );

glTexCoord2fv( &paMod->pfTextureArray[ ( paMod->puiFaceArray[j*9+4]-1 )*2 ] );
glNormal3fv( &paMod->pfNormalArray[ ( paMod->puiFaceArray[j*9+5]-1 )*3 ] );
glVertex3fv( &paMod->pfVertexArray[ ( paMod->puiFaceArray[j*9+3]-1 )*3 ] );

glTexCoord2fv( &paMod->pfTextureArray[ ( paMod->puiFaceArray[j*9+7]-1 )*2 ] );
glNormal3fv( &paMod->pfNormalArray[ ( paMod->puiFaceArray[j*9+8]-1 )*3 ] );
glVertex3fv( &paMod->pfVertexArray[ ( paMod->puiFaceArray[j*9+6]-1 )*3 ] );
glEnd();

问题:
1.使ati...xxx.dll崩溃的大致可能原因?
2.我用上面的方法,在几个程序没有崩溃的例外模型中,为什么我读取了一批图像,但只需要贴其中一个纹理的时候,我后面读取的纹理同样贴了上去?
...全文
95 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
swxlion 2004-12-04
  • 打赏
  • 举报
回复
的确.
syy64 2004-12-01
  • 打赏
  • 举报
回复
那是因为资源已耗尽。
swxlion 2004-12-01
  • 打赏
  • 举报
回复
安?这样啊?

那请问我应该怎么做呢?

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧