1

openGL でいくつかのオブジェクトをステンシルアウトしたいと考えています。

glClear(GL_STENCIL_BUFFER_BIT);
glColorMask(false, false, false, false);
glEnable(GL_STENCIL_TEST);
glStencilFunc(GL_EQUAL, 0, 1);
glStencilOp(GL_KEEP, GL_KEEP, GL_KEEP);
glDisable(GL_DEPTH_TEST);
glColor4f(0,0,1,1.0f);

gl::draw(mVBO); //a sphere

glEnable(GL_DEPTH_TEST);
glColorMask(true, true, true, true);
glStencilFunc(GL_ALWAYS,0, 1);
glStencilOp(GL_REPLACE,GL_KEEP, GL_ZERO);

mTexture.enableAndBind();
gl::drawCube(Vec3f(0,3,0),Vec3f(13,13,13) );

glDisable(GL_STENCIL_TEST)

単純なブール演算を実現するために何時間も試しましたが、わかりません。

私はこのようなものが欲しい:

画像

4

1 に答える 1

2

OpenGL のステンシル バッファは、フレーム バッファの 2 次元ピクセル グリッドで動作します。OpenGL 自体には、オブジェクトやシーンの概念はありません。点、線、三角形を描くだけです。したがって、OpenGL だけでは真の CSG は実現できません。ただし、ステンシル バッファー操作で CSG をエミュレートする手法はありますが、非常に複雑です。「ステンシル バッファ内の OpenGL CSG」を Google で検索して、1990 年代半ばからこの件に関するいくつかの論文を見つけてください。

于 2012-03-08T19:50:58.473 に答える