現在使用しているデカールを描画するためにglPolygonOffset(-1,-1)
、デカールのポリゴンがカメラに近づいているかのように、デカールの zbuffer 値をごまかして、デカールを描画しているときに、醜い Z ファイティング アーティファクトを取り除くことができます。glPolygonOffset
また、さまざまな引数を使用してデカールを相互に並べ替えることができると考えましたが、これはカメラの角度に基づいて調整されるようで、カメラを動かすとデカール全体の順序が入れ替わってしまいます。
私が試した別のアプローチは、このドキュメントの「デカールの作成」にあります。
- 書き込み用の深度バッファを無効にし、A をレンダリングします。
- 書き込み用に深度バッファを有効にし、B をレンダリングします。
- 書き込み用のカラー バッファを無効にし、A を再度レンダリングします。
- 書き込み用のカラー バッファを有効にします。
これが私の試みですが、深度バッファが書き込み用に有効になっているときにデカールが描画されるため、これを拡張して互いに相対的な順序でデカールを描画する方法がよくわかりません.ファインティング?
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
glEnable(GL_BLEND);
//Render a red solid quad on the color mask
glDepthMask(false);
glColor3f (1.0f, 0.0f, 0.0f);
glBegin (GL_QUADS);
glVertex2f(-1,-1);
glVertex2f(-1,1);
glVertex2f(1,1);
glVertex2f(1,-1);
glEnd ();
//Render the coincident decal, a transparent square works fine for now
glDepthMask(true);
glColor4f(0.0f, 1.0f, 0.0f, 0.5f);
glTranslatef(0, 1, 0.0f);
glScalef(0.5f, 0.5f, 0.5f);
glBegin (GL_QUADS);
glVertex2f(-1,-1);
glVertex2f(-1,1);
glVertex2f(1,1);
glVertex2f(1,-1);
glEnd ();
//Render the red quad again but only on the depth buffer
glColorMask(false, false, false, false);
glLoadIdentity();
glColor3f(1.0f, 0.0f, 0.0f);
glBegin (GL_QUADS);
glVertex2f(-1,-1);
glVertex2f(-1,1);
glVertex2f(1,1);
glVertex2f(1,-1);
glEnd ();
glColorMask(true, true, true, true);
これはほとんどのゲームで行われているように見えるので、私が見逃しているより良い解決策があると確信しています. しかし、私は多くの検索を行ってきましたが、openGL でこのようなデカールを注文するためのチュートリアルを見つけることができませんでした。多分私は間違った検索用語を使用していますか?このプロセスに別の名前はありますか?