1

ステンシルバッファを使用して、内部に窓のある壁を作成したいと思います。私のコードは次のようになります:

glEnable(GL_STENCIL_TEST);
glClearStencil(0);
glClear(GL_STENCIL_BUFFER_BIT);
glStencilMask(1);
glStencilFunc(GL_ALWAYS, 1, 1);

glStencilOp(GL_REPLACE, GL_REPLACE, GL_REPLACE);
glDisable(GL_DEPTH_TEST);   
glColor3f(1,1,1);

//Window
glBegin(GL_POLYGON);
glVertex3d(-5,0,-20);
glVertex3d(-5,0,40);
glVertex3d(-20,0,40);
glVertex3d(-20,0,-20);
glEnd();

glEnable(GL_DEPTH_TEST);
glStencilFunc(GL_NOTEQUAL, 1, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);

glEnable(GL_CLIP_PLANE0);                       
glClipPlane(GL_CLIP_PLANE0, eqr);   
glBindTexture(GL_TEXTURE_2D,texture[1]);
glBegin(GL_POLYGON);
glNormal3f(0.0f,-1.0,0.0f);

//Wall
glTexCoord2f(0.0f, 0.0f);glVertex3d(20,0,-20);
glTexCoord2f(1.0f, 0.0f);glVertex3d(20,0,40);
glTexCoord2f(1.0f, 0.0f);glVertex3d(-20,0,40);
glTexCoord2f(1.0f, 0.0f);glVertex3d(-20,0,-20);

glEnd();
glDisable(GL_STENCIL_TEST);

しかし、それはうまくいきません、私はその中に窓のない塗りつぶし壁全体を手に入れました、何か提案はありますか?

4

2 に答える 2

1

ウィンドウ システムからステンシル バッファを使用して OpenGL コンテキストを要求していることを確認してください。特に要求しない限り、デフォルトでは取得できない場合があります。

GLUTを使用したを次に示します。あなたは呼び出しを見たいと思うでしょう。glutInitDisplayMode()

生の Win32 を使用した別の例を次に示します。PIXELFORMATDESCRIPTORビットは重要な部分です。

glXChooseVisual()X11を使用している場合は、おそらく見たい場所です。

クロスプラットフォームのコンテキスト管理が必要な場合は、SDLをお勧めします。

于 2010-05-13T00:08:59.180 に答える
1

私はあなたのコードをテストしていませんが、変更する必要があると思います

glStencilFunc(GL_NOTEQUAL, 1, 1);

glStencilFunc(GL_EQUAL, 1, 1);
于 2011-05-01T14:33:20.893 に答える