2013-01-16 171 views
3

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

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); 
    } 
} 

日志和信息类只是一些类,控制System.out和存储静态变量静态引用。这些不影响LWJGL或OpenGL,所以我没有看到包括它们在内的很多观点。

在我的构建路径,我有lwjgl.jarlwjgl_util.jarslick_util.jar和当地人都与正确lwjgl.jar。开始项目时我没有错误,输出正常。我不知道为什么我仍然黑屏。如果它有任何用处,我会按照this教程系列创建我的项目,并且它在视频中似乎可以正常工作。

回答

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

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

或调整近裁剪平面:

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

我也建议偶尔清除帧缓冲区。

+0

我改变了从点(0.1,0.1)到点(0.5,0.4)绘制的几何代码,但仍然出现黑屏。然后,我尝试将glOrtho代码更改为您的建议,但仍然没有任何区别。我还添加glClear(GL_COLOR_BUFFER_BIT)作为我while循环内部的第一行,但屏幕仍然是黑色的。 – daviga404

+0

你的新分数仍然在Z = 0。 – genpfault

+0

@ user1301590:另外,你确定窗口是*完全*空白吗?检查左上角的红色像素。或者使用'glVertex2f(800f,600f)'作为第二点。 – genpfault

1

您忘记了打电话给glClear(GL_COLOR_BUFFER_BIT)。在绘制之前应该始终调用它。