当我每帧更新其位置时,OpenGL会闪烁

时间:2009-06-24 15:45:46

标签: opengl jogl

我正在学习OpenGL,刚开始接触照明。我启用了灯光和灯光0,在我的init方法中将其ambient / diffuse / specular设置为默认值,然后每帧我做这样的事情:

glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
// do my 3rd-person camera transforms and rotations
glLightfv(GL_LIGHT0, GL_POSITION, {0.1f, 0.0f, 0.0f});

(请注意,如果它有点错误,我正在使用JOGL在Java中编写我的应用程序,所以我从每行修改了gl。和GL。以便为所有C ++人员提供更好的可读性:))

然后我继续绘制我的三角形等等,最后我做了一个glFlush()。

奇怪的问题是,当我运行我的应用程序时,灯光会闪烁。在我的整个程序中我没有其他调用glLightfv(除了上面提到的,我的init方法中的调用,我调试它以确保它只运行一次)。它闪烁得非常快,屏幕显示撕裂。我的场景绘图中的任何一点都没有glDisable(GL_LIGHTING);不是我认为这会导致被点燃的物体闪烁。

出于调试目的,我还注释掉了我的绘图代码块,似乎没有任何东西打破了灯光 - 当然,我写了所有这些并在测试之前测试了它,所以我认为没有理由应该是错的。

基本上我知道这并不多,但其他人之前有过这个问题吗?有一些我找不到的简单解决方案吗?请索取任何可以帮助您的其他信息。最后,如果我根本无法得到答案,我可能不得不打破并编写一个测试用例,我可以在这里发布整个渲染代码并演示问题。

Here is a really bad animated gif I tried to make...但它有点显示我正在谈论的内容,只要光线是零星的。点亮的框架是它应该看起来的样子。当我慢慢降低到5fps时,它也不是那么闪烁,更像是随机打开或关闭。我不明白......

谢谢!

1 个答案:

答案 0 :(得分:7)

啊哈!我已经找到了答案...... 我只为该位置指定了3个浮点数,当它需要4个文档here时。所以第四个数字必须对光的亮度产生一些影响,正在从记忆中的其他随机区域读取,当然也会发生奇怪的事情。

抱歉浪费你的时间!