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

Ric*_*ket 2 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});
Run Code Online (Sandbox Code Playgroud)

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

然后我继续画三角形等等,最后我做了一个glFlush().

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

为了调试的目的,我还注释掉了我的绘图代码块,似乎没有什么东西可以破坏光照 - 当然,我在拍摄场景之前写了所有这些并进行了测试,所以我认为没有理由它应该是错误.

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

这是一个非常糟糕的动画GIF我试图制作...但它有点显示我在说什么,只要光是零星的.点亮的框架是它应该看起来的样子.当我慢慢降低到5fps时,它也不是那么闪烁,更像是随机打开或关闭.我不明白......

谢谢!!

Ric*_*ket 7

啊哈!我已经找到了答案......我只为该位置指定了3个浮点数,当它需要4个时,如此处所述.所以第四个数字,它必须对光的亮度有一些影响,是从内存中的其他随机区域读取的,当然奇怪的事情发生了.

抱歉浪费你的时间!