1

レンダリングする 2 番目のボックスを取得するのに問題があります。テクスチャで描画された 1 つのオブジェクトがあり、正常に動作しているように見えますが、それにいくつかのコードが添付されているため、その上でマウスの左ボタンを押したままにすると、2 番目のボックスが右側に表示されます。代わりに、2 番目のボックスが表示されず、テクスチャ ボックスが完全に消えます。

1 つのものを描画する前または後に有効または無効にする必要があるような、opengl で何かが欠けていると思います。

私の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();
    }

}

2 番目のボックスを起動するためのロジックとその動作をテストしたので、opengl が描画する方法に何か欠けているに違いないと思います。何が足りないのですか?それが現在、私のプロジェクトのすべての opengl コードです。

4

1 に答える 1

3

2番目のオブジェクトのテクスチャリングを無効にしているようには見えないため、テクスチャで描画されています。

一方、最初のボックスにはglColor()が指定されていないため、2番目のボックスを描画した後、最初のボックスは赤になります。これにより、赤で変調すると黒が生成され、変調が有効になっている場合に、それが消える可能性があります。

したがって、クワッドを描画するときは、テクスチャを明示的に有効/無効にする必要があります。また、色など、変更されるすべての頂点属性を指定する必要があります。

于 2012-12-28T10:21:34.467 に答える