2012-01-14 3 views
2

現在、背景を描画しています。次に、透明な三角形をステンシルバッファに描画し、次に青い四角形を描画します。私はその効果が背景を露出させる三角形の穴を持つ青い正方形であることを望んでいました。しかし、すべてのIM取得は、他のすべての上に描画された黒い三角形です。私はスクエアに希望の効果を得ていると思うが、ステンシルもバックグラウンドに適用されている。opengl stencil buffer - あまり動作していません

私の質問は、バックグラウンドを四角形の三角形の穴を通して表示できるように、次のコードを調整するにはどうすればよいですか?

static void Draw(void) 
{ 
glClear(GL_COLOR_BUFFER_BIT | GL_STENCIL_BUFFER_BIT); 

//big blue square 
glColor3ub(0,255,255); 
glBegin(GL_POLYGON); 
glVertex3i(5, 5, 0); 
glVertex3i(-5, 5, 0); 
glVertex3i(-5, -5, 0); 
glVertex3i(5, -5, 0); 
glEnd(); 

glStencilFunc(GL_ALWAYS, 1, 1); 
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); 

/* transparent triangle */ 
glColor4ub(0.0f, 0.0f, 0.0f, 0.0f); 
glBegin(GL_POLYGON); 
glVertex3i(-4, -4, 0); 
glVertex3i(4, -4, 0); 
glVertex3i(0, 4, 0); 
glEnd(); 

glStencilFunc(GL_EQUAL, 1, 1); 
glStencilOp(GL_INCR, GL_KEEP, GL_DECR); 

glStencilFunc(GL_EQUAL, 2, 1); 
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); 

/* blue square */ 
glColor3ub(0, 0, 200); 
glBegin(GL_POLYGON); 
glVertex3i(3, 3, 0); 
glVertex3i(-3, 3, 0); 
glVertex3i(-3, -3, 0); 
glVertex3i(3, -3, 0); 
glEnd(); 

if (doubleBuffer) { 
    glutSwapBuffers(); 
} else { 
    glFlush(); 
} 
} 

答えて

5

問題1:(私はそれをオフにするrecomment)前のどちらかを無効にステンシルテストを背景を描く、またはフラグメントが通過するようGL_ALWAYSにステンシル機能を切り替えます。その後、あなたは2つの異なるステンシル修正を設定していますが、どちらもあなたが意図するものではありません。だからここに変更があります:

glDisable(GL_STENCIL_TEST); 
glStencilMask(0x0); 

draw_background(); 

glEnable(GL_STENCIL_TEST); 
glStencilMask(0x1); 
glStencilFunc(GL_ALWAYS, 0x1, 0x1); 
glStencilOp(GL_KEEP, GL_KEEP, GL_REPLACE); 
glColorMask(GL_FALSE, GL_FALSE, GL_FALSE, GL_FALSE); 
glDepthMask(GL_FALSE); 

draw_trangle(); 

glStencilFunc(GL_NOTEQUAL, 0x1, 0x1); 
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP); 
glColorMask(GL_TRUE, GL_TRUE, GL_TRUE, GL_TRUE); 
glDepthMask(GL_TRUE); 

draw_blue_square(); 
+0

ありがとうが、それはかなり動作しません。すべて私の見ている三角形の穴のない背景上の正方形です。メインに物事を設定する方法については何かがありますか? –

+0

@westr:そうかもしれない。私はそのコードをテストしなかったことも認めています。ソースコード全体をpastebinに置くことができますか?それは私に)あなたの問題を再現させ、b)それを適所に固定することを可能にします。 – datenwolf

+0

ここに行くhttp://pastebin.com/636kyXU7 –

関連する問題