绘制没有纹理的第二个对象时出现问题

时间:2012-12-28 10:08:19

标签: java opengl drawing lwjgl

我无法确定要渲染的第二个方框。 所以我有一个用纹理绘制的对象,它似乎工作得很好,但是我附上了一些代码,所以如果我按下鼠标左键,它的第二个框就会向右移动。 取而代之的是第二个盒子无法完成,纹理盒子完全消失了。

我认为我错过了一些关于opengl的东西,就像我必须在绘制1件事之前或之后启用或禁用它。

继承了我对opengl的启动代码:

private static void glInit(){
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(0, Display.getWidth(), Display.getHeight(), 0, -1, 1);
    glMatrixMode(GL_MODELVIEW);
    glEnable(GL_TEXTURE_2D);
    glClearColor(0, 0, 0, 1);
    glDisable(GL_DEPTH_TEST);

}

表示绘制对象的代码:

public void render(){
    if(myImage != null){            
        myImage.bind();

        glBegin(GL_QUADS);
        {
            // upper left
            glTexCoord2f(0, 0);
            glVertex2f(x, y);
            // upper right
            glTexCoord2f(1, 0);
            glVertex2f(x + size, y);
            // bottom right
            glTexCoord2f(1, 1);
            glVertex2f(x + size, y + size);
            // bottom left
            glTexCoord2f(0, 1);
            glVertex2f(x, y + size);
        }
        glEnd();

    }

    if(drawChoiceBox){
        glColor3f(1, 0, 0);
        glBegin(GL_QUADS);
        {

            glVertex2f(x + size, y - size);
            glVertex2f(x + size*2, y - size);
            glVertex2f(x + size*2, y + size*2);
            glVertex2f(x + size, y + size*2);
        }
        glEnd();
    }

}

我已经测试了第二个盒子的逻辑以及它的作用,所以我想我必须错过了与opengl绘制东西的方式。 知道我缺少什么吗?这就是我项目中的所有opengl代码。

1 个答案:

答案 0 :(得分:3)

看起来你没有为第二个对象禁用纹理,所以它是用纹理绘制的。

同时你的第一个盒子没有指定glColor(),所以在绘制第二个盒子后,第一个盒子将是红色。这可能会使它消失,如果用红色调制产生黑色,则启用调制。

因此,您应该在绘制四边形时明确启用/禁用纹理,以及指定所有已更改的顶点属性,例如颜色。