6

OpenGL ES 1.0でlibgdxを使用していますが、SpriteBatchがステンシルバッファに書き込み/描画できるかどうか疑問に思っています。私はそれに書き込もうとしていて、まったく結果が得られません。ステンシルバッファを使用した経験はありませんが、たくさん読んでいるので、次の何かが間違っている場合は訂正してください。基本的に私がやりたいのは、SpriteBatchを使用してテクスチャをステンシルバッファに描画することです。そのため、他の何かを描画すると(ステンシルバッファが無効になっている場合)、ステンシルバッファが1に等しい領域にのみ描画されます。

これが私の望ましい結果です。星の形をしたテクスチャをステンシルバッファに描画してから、赤いテクスチャをカラーバッファに描画する場合、赤いテクスチャで、星がステンシルバッファにあるピクセルを省略します。

これはこれまでの私のコードです:

   batch.begin();
   Gdx.gl10.glEnable(GL10.GL_STENCIL_TEST);
   Gdx.gl10.glEnable(GL10.GL_ALPHA_TEST);
   Gdx.gl10.glStencilFunc(GL10.GL_ALWAYS, 0x1, 0xffffffff);
   Gdx.gl10.glStencilOp(GL10.GL_REPLACE, GL10.GL_REPLACE, GL10.GL_REPLACE);
   Gdx.gl10.glColorMask(false, false, false, false);

   batch.draw(myShape, 100, 100); //draw to the stencil buffer a shape (texture region)

   batch.end();
   batch.begin();

   Gdx.gl10.glColorMask(true, true, true, true);
   Gdx.gl10.glStencilOp(GL10.GL_KEEP, GL10.GL_KEEP, GL10.GL_KEEP);

   // draw where the shape has NOT been drawn
   Gdx.gl10.glStencilFunc(GL10.GL_NOTEQUAL, 0x1, 0xff);

   batch.draw(BackGroundLayer, 0, 0);// draw background

   Gdx.gl10.glDisable(GL10.GL_STENCIL_TEST);
4

1 に答える 1

3

はい、spriteBatchはステンシルバッファに書き込みます。問題は、ステンシルバッファを設定する必要があることでした。これを行う方法は、アプリケーションconfiguratioinオブジェクトを作成し、次のようにアプリケーションを初期化するときにパラメーターとして渡すことです。

Androidランチャーの場合、次のようにする必要があります。

AndroidApplicationConfiguration Configuration = new  AndroidApplicationConfiguration();
Configuration.stencil = 8;  //stencil buffer size
initialize(new Game(), Configuration);   //pass it as parameter  

デスクトップの場合はこのようなものです

LwjglApplicationConfiguration Configuration = new  LwjglApplicationConfiguration();
Configuration.stencil = 8;
new LwjglApplication(new Game(), Configuration);
于 2012-10-16T05:55:07.670 に答える