无法在openGL中呈现形状

时间:2013-05-17 01:41:49

标签: java opengl lwjgl

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

    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。

2 个答案:

答案 0 :(得分: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)的传统计算机坐标系。

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

答案 1 :(得分:0)

glVertex2f使用与glOrtho相同的尺寸单位,因此,除非您的显示宽度和高度以1为单位,如10或更小,否则您可能看不到任何内容!