我正在学习 OpenGL,并且刚刚开始接触光照。我启用照明和 light 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);并不是说我认为这会导致点亮的物体闪烁。
出于调试目的,我还注释掉了我的绘图代码块,似乎没有什么会破坏照明 - 当然,我写了所有这些并在照亮场景之前对其进行了测试,所以我看不出有什么理由应该是错的。
基本上我知道这没什么大不了的,但是以前有没有其他人遇到过这个问题?有没有我找不到的简单解决方案?请索取任何可以帮助您帮助我的其他信息。最后,如果我根本得不到答案,我可能不得不分解并编写一个测试用例,我可以在此处发布整个渲染代码并演示问题。
Here is a really bad animated gif I tried to make...但它有点显示我在说什么,就光线是零星的而言。点亮的框架是它应该看起来的样子。当我将它减慢到 5fps 时,它也没有那么多闪烁,更多的是随机打开或关闭。我不明白...
谢谢!!
最佳答案
啊哈!我已经找到答案了... 我只为该位置指定了 3 个 float ,当它需要 4 个时,如记录的那样 here .所以第四个数字,肯定对光的亮度有一些影响,是从内存中的其他随机区域读取的,当然奇怪的事情发生了。
抱歉浪费您的时间!
关于当我每帧更新其位置时,OpenGL 灯闪烁,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1039208/