我正在使用 LWJGL 2.8.5 开发 3D 可视化应用程序。在阅读了项目主页上的第一个教程后,我还阅读了一本 OpenGL 书籍,深入分析了我的分析。我看到 OpenGL 中的典型过程是在 init 函数中绘制场景,然后简单地在循环中调用显示的更新。
但是,当我使用 LWJGL 尝试此操作时,我会在显示屏上看到闪烁的效果。消除闪烁的唯一方法是在显示更新周期中重新绘制场景。为什么会这样?
为了更好地解释我的问题,我创建了一个简单的类来重现该问题。它只是在屏幕中央绘制一个四边形,然后进入无休止的屏幕更新循环。
请注意,如果我取消注释循环中的绘制调用,则闪烁会消失,一切正常。为什么?
我期望只绘制一次对象并移动相机以获得静态场景的不同视图有什么问题吗?
这是代码:
package test;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.Display;
import org.lwjgl.opengl.DisplayMode;
import org.lwjgl.opengl.GL11;
import org.lwjgl.util.glu.GLU;
import static org.lwjgl.opengl.GL11.*;
public class DisplayTest
{
public static void initGL()
{
GL11.glViewport(0, 0, 640, 480);
glMatrixMode(GL_PROJECTION);
GLU.gluPerspective(45.0f, 640f/480f,0.1f, 100.0f);
draw();
}
public static void draw()
{
glMatrixMode(GL_MODELVIEW);
GL11.glLoadIdentity(); // Reset The Current Modelview Matrix
GL11.glTranslatef(0, 0, -6.0f);//Place at the center at -6 depth units
//Start drawing a quad …Run Code Online (Sandbox Code Playgroud)