LWJGL OpenGL黑屏问题

3
我刚开始学习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.jar。启动项目时没有错误,输出正常。我不知道为什么仍然出现黑屏。如果有用的话,我正在按照this教程系列创建我的项目,视频中似乎工作正常。
2个回答

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

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

或者调整您的近裁剪平面:

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

我也建议定期清除帧缓冲区。

我已经修改了几何代码,从点(0.1,0.1)绘制到点(0.5,0.4),但仍然看到黑屏。我尝试按照您的建议更改glOrtho代码,但仍然没有任何改变。我还在while循环内部的第一行添加了glClear(GL_COLOR_BUFFER_BIT),但屏幕仍然是黑色的。 - daviga404
@user1301590:另外,你确定窗口是完全空白的吗?检查一下左上角是否有红色像素。或者使用glVertex2f(800f,600f)作为你的第二个点。 - genpfault
结果问题是我以为1f覆盖整个屏幕而不仅仅是一个像素,现在一切都正常了。 - daviga404

1
你忘记调用 glClear(GL_COLOR_BUFFER_BIT) 了。在绘图之前,它应该被调用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接