【问题标题】:LWJGL OpenGL Black ScreenLWJGL OpenGL 黑屏
【发布时间】:2013-01-16 21:04:37
【问题描述】:

我刚开始学习 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 教程系列来创建我的项目,它似乎在视频中运行良好。

【问题讨论】:

    标签: java opengl lwjgl


    【解决方案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 代码更改为您建议的代码,但这仍然没有任何区别。我还添加了 glClear(GL_COLOR_BUFFER_BIT) 作为我的 while 循环内部的第一行,但屏幕仍然是黑色的。
    • @user1301590:另外,你确定窗口是完全空白的吗?检查左上角的红色像素。或者使用glVertex2f(800f,600f) 作为您的第二点。
    • 原来问题是我认为 1f 覆盖​​了整个屏幕而不是一个像素,现在一切正常。
    【解决方案2】:

    您忘记拨打glClear(GL_COLOR_BUFFER_BIT)。它应该总是在你绘制之前被调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多