2

我正在学习 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 用 Ja​​va 编写我的应用程序,所以我从每一行修剪了 gl. 和 GL.,以便为所有 C++ 人员提供更好的可读性:))

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

奇怪的问题是,当我运行我的应用程序时,指示灯会闪烁。在我的整个程序中,我没有对 glLightfv 的其他调用(如上所述,我的 init 方法中的调用除外,我已对其进行调试以确保它只运行一次)。它闪烁非常快,屏幕显示撕裂。在我的场景图中,我也没有 glDisable(GL_LIGHTING) ;并不是说我认为这会导致被点亮的物体闪烁。

出于调试目的,我还注释掉了我的绘图代码块,并且似乎没有任何东西破坏照明 - 当然,我写了所有这些并在照明场景之前对其进行了测试,所以我认为没有理由应该这样做错误的。

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

这是我试图制作的一个非常糟糕的动画 gif……但它有点显示我在说什么,就光是零星的而言。点亮的框架是它应该看起来的样子。此外,当我将其减慢到 5fps 时,它并没有那么多闪烁,更多的是随机打开或关闭。我不明白...

谢谢!!

4

1 回答 1

7

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

很抱歉浪费您的时间!

于 2009-06-24T15:51:25.160 回答