3

我最近用 opengl(使用 freeglut)写了一个迷宫游戏,在 Ubuntu 或 Cygwin 中构建时运行良好,但是在使用 freeglut 构建在 Fedora Core 12 上时,游戏崩溃了,我的教授在构建它时什么也看不到在他的机器上(他没有透露的操作系统)。

此外,在之前的作业中,即使我已经实现了双缓冲并且在每次显示后刷新缓冲区,我也会闪烁。闪烁发生在我的 Fedora 机器上,很少发生在我的 Ubunutu 机器上,而在 cygwin 中则完全没有。

最后,在 Fedora 机器上,雾非常密集,似乎忽略了对“glFogf(GL_FOG_DENSITY, 0.1)”的调用。然而,在 Cygwin 和 Ubuntu 上,雾的表现完美无缺。

操作系统之间的 freeglut 实现之间是否存在许多差异,这将是一个问题?我的教授似乎准备在这些项目上让我失望,但我不知道为什么 opengl 在操作系统之间表现得如此不稳定。

如果您有任何见解,请告诉我,并感谢您的宝贵时间。

4

2 回答 2

2

我按顺序收到了以下两个电话。应该是这样的。

glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);glutCreateWindow("我的窗口");

我是这样的:

glutCreateWindow("我的窗口"); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA | GLUT_DEPTH);

因此,我不能保证一个双缓冲窗口,因此有时它会闪烁,有时它不会。

同样在 Red-Hat 发行版中,size_t 被定义为有符号整数,而 Ubuntu 使用无符号整数。这导致我的教授机器在尝试使用函数 fread() 时出现循环问题,该函数的返回类型在 Fedora 中为 -1,在 Ubuntu 中为 static_cast(-1),我认为这不好:/。我花了几天时间在 Ubuntu 内核源代码中查找问题。

于 2010-08-11T03:46:41.193 回答
0

我有教 OpenGL 的经验,当 glut 的使用方式与预期不同时,就会发生这种情况。一些实现/驱动程序处理它,而另一些则不处理 - 当它们以非标准方式使用时,实现之间存在很大差异。当以标准方式使用时,差异非常小。

我看到的最常见原因是每次更改屏幕后都没有调用 glutPostRedisplay 。

其他可能的原因是在显示功能以外的地方绘图,或者没有正确设置回调。

除此之外,我只能猜测发生了什么,但如果一个实现根本没有显示任何内容,那么我很确定你有一些基本错误。

于 2010-07-31T05:17:22.270 回答