LWJGL OpenGL黑屏

时间:2013-01-16 21:04:38

标签: java opengl lwjgl

我刚开始学习LWJGL / OpenGL来创建一个3D游戏,所以我从小开始尝试简单地显示一条线(2D)。 窗口加载正常,尺寸合适,但显示屏上没有任何内容。有一个空白屏幕,我似乎没有对代码做出任何改变,影响屏幕上绘制的内容。这可能是因为我对如何正确执行此操作缺乏了解,或者可能是我的代码/计算机中的问题。我已经尝试添加和删除各种东西到我的初始化代码,如glEnable(GL_TEXTURE_2D)和glDisable(GL_TEXTURE_2D),我尝试在渲染代码中调用pushMatrix和popMatrix,我尝试在GL11初始化代码中定义视口但是没有好像在起作用。我的代码如下:

import static org.lwjgl.opengl.GL11.*;
import org.lwjgl.LWJGLException;
import org.lwjgl.opengl.*;

public class Main {
    public Main(String[] args) throws LWJGLException{
        Logging.info("Starting up "+Info.title+" v"+Info.version+"!");
        initDisplay();
        initGL11();
        startGameLoop();
    }
    public static void main(String[] args) throws LWJGLException{
        new Main(args);
    }
    public void initDisplay(){
        try {
            Logging.info("Initializing display...");
            Display.setDisplayMode(new DisplayMode(800, 600));
            Display.setTitle(Info.title);
            Display.create();
            Logging.info("Display initialized!");
        } catch (LWJGLException e) {
            Logging.severe(e);
            Display.destroy();
        }
    }
    public void initGL11() throws LWJGLException{
        glMatrixMode(GL_PROJECTION);
        glLoadIdentity();
        glOrtho(0f, 800f, 600f, 0f, 0f, 1f);
        glMatrixMode(GL_MODELVIEW);
        glLoadIdentity();
    }
    public void startGameLoop(){
        while(!Display.isCloseRequested()){
            glBegin(GL_LINE);
                glColor3f(1f,0f,0f);
                glVertex2f(0f,0f);
                glVertex2f(1f,1f);
            glEnd();

            Display.update();
            Display.sync(60);
        }
        Logging.info("Closing down!");
        Display.destroy();
        System.exit(0);
    }
}

Logging和Info类只是对某些控制System.out和存储静态变量的类的静态引用。这些不会影响LWJGL或OpenGL,所以我没有看到包含它们的重点。

在我的构建路径中,我有 lwjgl.jar lwjgl_util.jar slick_util.jar ,并且本机链接到lwjgl。罐子正确。启动项目时没有错误,输出正常。我不知道为什么我还在黑屏。如果有任何用处,我正在关注this教程系列来创建我的项目,它似乎在视频中正常工作。

2 个答案:

答案 0 :(得分:1)

glOrtho(0f, 800f, 600f, 0f, 0f, 1f);
...
glVertex2f(0f,0f);
glVertex2f(1f,1f);

尝试提交与近剪裁平面不一致的几何体。

或调整近剪裁平面:

glOrtho(0f, 800f, 600f, 0f, -1f, 1f);

我还建议偶尔清除帧缓冲。

答案 1 :(得分:1)

您忘记致电glClear(GL_COLOR_BUFFER_BIT)。在绘制之前应始终调用它。