2

ここには、ウィンドウにいくつかの要素を描画する小さなプログラムがあります。

class CustomPointer{
void draw(); //draw png image on the screen
};

class CustomRectangle{
void draw(){
drawRect(); //draw Rectangle with a certain color
drawbtnImage(); //draw png image to the top right of rectangle (alphaBlending enabled)
}
};

main.cpp

CustomRectangle customRectangle;
CustomPointer customPointer;

void draw(){
drawBackgroundImage();
customRectangle.draw();
customPointer.draw();
}

上記のコードを使用して要素を描画するとcustomPointer、ポインターが他のすべてに描画されるため、画面上の他のすべての要素の上に描画されることを期待していました。しかし、私のポインターは背景の上に表示されていますが、customRectangle/btnImage.

customPointerウィンドウ上の他のすべての要素の上に常に残るようにするにはどうすればよいですか? さらに、カスタム シェイプ (コントロールの右上にある円形のボタンなど) の上に描画されること
も期待していました。btnImage.draw()これbtnImageは png 形式で、側面が透明になっています。ただし、長方形の上に表示されるのではなく、その後ろに表示されます。修正する同様の問題。助言がありますか?

4

2 に答える 2

0

その効果を得るために、ポインター描画以外のすべての深さテストを有効にすることができます。

void draw(){
glEnable(GL_DEPTH_TEST);
drawBackgroundImage();
customRectangle.draw();
glDisable(GL_DEPTH_TEST);
customPointer.draw();
}

それは望ましい効果を得るはずです

于 2013-01-30T07:34:47.187 に答える
0

2D 空間の Z ソート zalgorithm を使用する必要があると思います。すべてのオブジェクトには独自の Z 値 (整数を指定できます) が必要であり、グローバルな Draw メソッドでは、この Z オーダーを使用して並べ替えます。

一番上の四角形の場合、 Z を大きな値に設定して、常に最初/最後になるようにすることができます。

これは、透明度を使用するときにも役立ちます。

void drawAll() {
    sort_by_z_order();
    foreach rect in sorted_rect_list {
        draw_rect(rect)
    }
}
于 2013-01-30T07:14:52.303 に答える