LibGDXを使用して、簡単な三目並べの例を作成しています。シンプルな画像があります:クロス、サークル、ボード、すべてpng
GIMPで作成され、背景が透明です。
それらTexture
を透明度付きでレンダリングするにはどうすればよいですか?
GL10の有効化機能を試しましたが、機能しないようです。
LibGDXを使用して、簡単な三目並べの例を作成しています。シンプルな画像があります:クロス、サークル、ボード、すべてpng
GIMPで作成され、背景が透明です。
それらTexture
を透明度付きでレンダリングするにはどうすればよいですか?
GL10の有効化機能を試しましたが、機能しないようです。
回答:
レンダリング前:
batch.enableBlending();
batch.begin();
//draw stuff
batch.end();
スプライトを作成し、それにテクスチャを割り当てます。次に、スプライトsetColorを使用してアルファを調整します。
Texture yourTexture = new Texture("image.png");
sprite = new Sprite(yourTexture);
//RGBA
sprite.setColor(1, 0, 0, 0.2f);
そしてrender()ループでSpriteBatchを使用します
sprite.draw(spriteBatch);
入れたら
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
render()ループの開始時に、画面を黒で更新する必要があります。そのため、いずれかの画像に透明度がある場合、それは顕著になります。
したがって、おそらくrender()ループは次のようになります。
public void render(float delta) {
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
// Update logic & etc.
batch.begin();
// Place your render calls
// In this I use a Sprite object named "sprite" and all you need to do is call .draw();
// on it and it will render at 0,0, unless told differently with .setPosition();
sprite.draw(batch);
batch.end();
}
同様に、透明度のある.pngをレンダリングしようとしました。基本設定(ブレンドがアクティブになっていない)では、適切にレンダリングされませんでした。
ブレンドをアクティブにしたことはありませんが、これを追加しました。
Gdx.gl.glClear(GL20.GL_ALPHA_BITS);
私の問題は、アルファがクリアされなかったことです。つまり、0.1アルファでレンダリングした場合、アルファが1に「スタック」されるまで10フレームかかります。上記の呼び出しを追加すると、色をクリアするようにアルファがクリアされます。
これは古い質問であることを知っているので、解決策は異なっていました。enableBlendingは引き続き機能するはずですが、これがアルファの「スタック」を防ぐかどうかはわかりません。おそらく、アルファビットをクリアすることが、見た目を妨げる最も簡単な方法です。
実際のレンダリングに関しては、いつもと同じです。
//Viewport, camera, logic, etc
batch.begin();
//draw your image(s) here
batch.end();