我最近用opengl (使用freeglut)写了一个迷宫游戏,在Ubuntu或Cygwin中构建时运行良好,但当使用freeglut构建在Fedora Core 12上时,游戏就崩溃了,我的教授在他的机器上构建它时什么也看不见(他没有透露操作系统)。
此外,在以前的任务中,即使我实现了双缓冲,并且在每次显示后刷新缓冲区,我也得到了闪烁。闪烁发生在我的Fedora机器上,在我的Ubunutu机器上很少见,在cygwin中根本没有。
最后,在Fedora机器上,雾非常密集,似乎忽略了对'glFogf(GL_FOG_DENSITY,0.1)‘的调用。然而,在Cygwin和Ubuntu上,雾表现得无懈可击。
在不同的操作系统中,freeglut的实现之间是否有太多的不同,这将是一个问题?我的教授似乎准备在这些项目上让我失望,但我不知道为什么opengl在不同的操作系统之间表现得如此不稳定。
如果您有任何见解,请让我知道,并感谢您的时间。
发布于 2010-08-11 11:46:41
我把下面两个电话搞混了。应该是这样的。
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);glutCreateWindow(“我的窗口”);
我是这样想的:
glutCreateWindow(“我的窗口”);glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);
因此,我不能保证有一个双缓冲的窗口,因此它有时会闪烁,有时不会。
同样在Red发行版中,size_t被定义为有符号整数,而Ubuntu则使用无符号整数。这导致我的教授在尝试使用函数fread()时出现了循环问题,该函数的返回类型在Fedora中为-1,在Ubuntu中为static_cast(-1),我认为这不太好:/。我花了几天的时间才在Ubuntu内核源中找到这个问题。
发布于 2010-07-31 13:17:22
在我教OpenGL的经验中,当glut的使用方式与预期的不同时,就会发生这种情况。一些实现/驱动程序处理它,而另一些不处理-当它们以非标准的方式使用时,实现之间有相当大的差异。当以标准方式使用时,差异非常小。
我见过的最常见的原因是,每次屏幕更改后,glutPostRedisplay都不会被调用。
其他可能的原因是在display函数以外的位置绘制,或者没有正确设置回调。
除此之外,我只能猜测发生了什么,但如果一个实现根本没有显示任何内容,那么我可以肯定你肯定搞错了。
https://stackoverflow.com/questions/3337494
复制相似问题