我正在学习 OpenGL,刚刚开始接触照明。我启用光照和光照 0,在我的 init 方法中将其环境/漫反射/镜面反射设置为默认值,然后每一帧我都执行以下操作:
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) ;并不是说我认为这会导致被点亮的物体闪烁。
出于调试目的,我还注释掉了我的绘图代码块,并且似乎没有任何东西破坏照明 - 当然,我写了所有这些并在照明场景之前对其进行了测试,所以我认为没有理由应该这样做错误的。
基本上我知道这没什么可做的,但是以前有没有其他人遇到过这个问题?有一些我找不到的简单解决方案吗?请索取任何可以帮助您帮助我的其他信息。最后,如果我根本无法得到答案,我可能不得不分解并编写一个测试用例,我可以在这里发布整个渲染代码并演示问题。
这是我试图制作的一个非常糟糕的动画 gif……但它有点显示我在说什么,就光是零星的而言。点亮的框架是它应该看起来的样子。此外,当我将其减慢到 5fps 时,它并没有那么多闪烁,更多的是随机打开或关闭。我不明白...
谢谢!!