2017-01-07 4 views
0

LibGDXに多角形マスクを作成する方法はありますか?私は正方形と円でマスクをする方法を知っていますが、ポリゴンではありません。以下のコードは、四角形を使ってマスクを正しくレンダリングします。LibGDXポリゴンマスク

 Gdx.gl.glClearColor(0, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     Gdx.gl.glClearDepthf(1f); 
     Gdx.gl.glClear(GL20.GL_DEPTH_BUFFER_BIT); 
     Gdx.gl.glDepthFunc(GL20.GL_LESS); 
     Gdx.gl.glEnable(GL20.GL_DEPTH_TEST); 
     Gdx.gl.glDepthMask(true); 
     Gdx.gl.glColorMask(false, false, false, false); 

     // Renders the rectangle 
     shapes.begin(ShapeRenderer.ShapeType.Filled); 
     shapes.setColor(1, 1, 1, 1); 
     shapes.rect(Gdx.graphics.getWidth()/2, gdx.graphics.getHeight()/2, 200f, 200); 
     shapes.end(); 

     batch.begin(); 
     Gdx.gl.glColorMask(true, true, true, true); 
     Gdx.gl.glEnable(GL20.GL_DEPTH_TEST); 
     Gdx.gl.glDepthFunc(GL20.GL_EQUAL); 
     bg.draw(batch); 
     batch.end(); 
     Gdx.gl.glDisable(GL20.GL_DEPTH_TEST); 

以下のコードは動作しません。単純に黒い画面を表示します。

 Gdx.gl.glClearColor(0, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 
     Gdx.gl.glClearDepthf(1f); 
     Gdx.gl.glClear(GL20.GL_DEPTH_BUFFER_BIT); 
     Gdx.gl.glDepthFunc(GL20.GL_LESS); 
     Gdx.gl.glEnable(GL20.GL_DEPTH_TEST); 
     Gdx.gl.glDepthMask(true); 
     Gdx.gl.glColorMask(false, false, false, false); 

     // This should be the polygon being rendered as a mask here 
     polyBatch.begin(); 
     polygonSprite.draw(polyBatch); 
     polyBatch.end(); 

     batch.begin(); 
     Gdx.gl.glColorMask(true, true, true, true); 
     Gdx.gl.glEnable(GL20.GL_DEPTH_TEST); 
     Gdx.gl.glDepthFunc(GL20.GL_EQUAL); 
     bg.draw(batch); 
     batch.end(); 
     Gdx.gl.glDisable(GL20.GL_DEPTH_TEST); 

ただし、以下のコードでは、ポリゴンを細かくレンダリングし、最後の例と同じ座標を使用しています。

 Gdx.gl.glClearColor(0, 0, 0, 1); 
     Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT); 

     // This polygon uses the same coordinates as the last example 
     // however it now displays the polygon. 
     polyBatch.begin(); 
     polygonSprite.draw(polyBatch); 
     polyBatch.end(); 

答えて

0

それはそのようなGdx.gl機能、同封されないように下向きに第三段落にを移動してみてください:助けを

//batch.begin(); 
    //from here 

    Gdx.gl.glColorMask(true, true, true, true); 
    Gdx.gl.glEnable(GL20.GL_DEPTH_TEST); 
    Gdx.gl.glDepthFunc(GL20.GL_EQUAL); 

    //to here 
    batch.begin(); 

    bg.draw(batch); 
    batch.end(); 
    Gdx.gl.glDisable(GL20.GL_DEPTH_TEST); 
+0

感謝を残念ながら、それは動作しませんでした。私は行ごとに試してみて、別々の行を混合してbatch.begin()メソッドの前に置いてみましたが、何も働かなかった。 –