1

我试图按照示例代码在黑色背景上简单地显示一个矩形,但它似乎没有显示。我所做的是

    private static void initGL(){
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity(); 
    glOrtho(0,Display.getWidth(),0,Display.getHeight(),-1,1);
    glMatrixMode(GL_MODELVIEW);

    glDisable(GL_DEPTH_TEST); //2D mode

    glColor3f(0.5f, 0.0f, 1.0f); 
    glBegin(GL_QUADS); 
        glVertex2f(-0.75, 0.75);
        glVertex2f(-0.75, -0.75);
        glVertex2f(0.75, -0.75);
        glVertex2f(0.75, 0.75);
    glEnd();
}

除了黑色背景之外,它不会在屏幕上显示任何内容。有谁知道我可能做错了什么?我在eclipse中使用lwjgl。

4

2 回答 2

1

首先要做的事情:你只需要运行整个

glMatrixMode(GL_PROJECTION);
glLoadIdentity(); 
glOrtho(0,Display.getWidth(),0,Display.getHeight(),-1,1);
glMatrixMode(GL_MODELVIEW);

在你的程序中做一次,可能在你运行之后不久Display.create()

此外,您正在使用错误的顶点进行镶嵌。你写了

glVertex2f(-0.75, 0.75);
glVertex2f(-0.75, -0.75);
glVertex2f(0.75, -0.75);
glVertex2f(0.75, 0.75); 

这意味着从 (-0.75, -0.75)像素到 (0.75, 0.75) 像素绘制一个矩形。这太小以至于无法注意到。我的猜测是您假设glVertex2f处理显示宽度的一小部分。它不是。glVertex2f处理实际坐标,它只允许小数像素,不像glVertex2i(这很有用,信不信由你,它有助于更​​平滑的动画)。就像是

glVertex2f(100F, 100F);

将顶点放置在 (100, 100) 处,实际上等效于

glVertex2i(100, 100);

另外,请记住,负像素将被渲染到屏幕外,因为 OpenGL 的坐标系原点 (0, 0) 位于左下方,其行为类似于数学类中坐标系的第一象限,而不像传统的左上角为 (0, 0) 的计算机坐标系。

至于黑色背景,LWJGLDisplay默认为黑色背景,因此建议使用您的背景颜色绘制一个覆盖整个显示宽度和高度的四边形。一个四边形不会真正影响您的表现。

于 2013-05-17T03:17:32.347 回答
0

glVertex2f使用与您相同的尺寸单位,glOrtho除非您的显示宽度和高度以单位为单位,例如 10 或更少,否则您可能看不到任何东西!

于 2013-05-17T04:11:16.280 回答