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

标签 opengl jogl

我正在学习 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 用 Ja​​va 编写我的应用程序,所以我从每一行中删除了 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/

相关文章:

windows - 用于游戏内覆盖的 SDK

java - 我需要使用 Java+OpenGL 构建哪些 Ubuntu/Debian 软件包?

c - OpenGL 只是拒绝渲染任何东西,即使数据是正确的

android - Android 平台上是否有 OpenGL ES 2.0 的 java 绑定(bind)?

java - 开始使用jogl,找不到DebugGL类

java - 科拉达和乔格尔

java - EXCEPTION_ACCESS_VIOLATION (0xc0000005) - OpenGL 索引数组

java - OpenGL:使用一个 VAO (LWJGL) 渲染 3D 模型的一个或多个部分

C++ Opengl BMP 如何设法从 header 中提取宽度和高度?

opengl - GL_CURRENT_VERTEX_ATTRIB - 文档说明