1

我无法让第二个盒子渲染。到目前为止,我有 1 个用纹理绘制的对象,它似乎工作正常,但我附加了一些代码,所以如果我在它上面按住鼠标左键,第二个框会出现在它的右边。相反,第二个盒子没有出现,纹理盒子完全消失了。

我认为我在 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代码。

4

1 回答 1

3

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

同时,您的第一个框没有指定 glColor(),因此在绘制第二个框后,第一个框将是红色的。如果通过红色调制产生黑色,并且启用调制,这可能会使其消失。

因此,您可能应该在绘制四边形时显式启用/禁用纹理,并指定所有更改的顶点属性,例如颜色。

于 2012-12-28T10:21:34.467 回答