0

我正在开发一个仅使用 OpenGL 的项目(它应该成为一个特定的游戏),现在经过几周的开发,我偶然发现了使用GL.GetError(). 因为我不喜欢它只说明出了什么问题而不是哪里出了问题,所以我想修复发生的错误。

所以会发生这样的事情:当启动应用程序时,只有几帧(三到四帧)带有StackUnderflow,它会切换到StackOverflow并保持这种状态。

我检查了我的矩阵Push——Pop一致性,没有发现任何未闭合的矩阵。有趣的是,据我所见,照明不起作用(各种物体的所有面都具有相同的亮度)。

还有其他可能的原因吗?

(如果您想查看源代码,请访问:http: //galwarcom.svn.sourceforge.net/viewvc/galwarcom/trunk/galwarcom/

4

1 回答 1

4

您需要在弹出之前设置矩阵模式,因为每种模式都有一个单独的堆栈。如果你做这样的事情,它会下溢:

glMatrixMode(GL_MODELVIEW)
glPushMatrix(); 
... stuff with model view ...
glMatrixMode(GL_PROJECTION)
glPushMatrix() 
... stuff with project matrix ...
glPopMatrix()  // projection popped
glPopMatrix()  // projection again

你在 drawHUD() 中做类似的事情,可能在其他地方。

于 2010-12-13T21:40:06.257 回答