LibGDXで透明なPNGをレンダリングするにはどうすればよいですか?


12

LibGDXを使用して、簡単な三目並べの例を作成しています。シンプルな画像があります:クロス、サークル、ボード、すべてpngGIMPで作成され、背景が透明です。

それらTextureを透明度付きでレンダリングするにはどうすればよいですか?

GL10の有効化機能を試しましたが、機能しないようです。


これをコードに入れましたか:Gdx.gl.glClearColor(1、1、1、1); Gdx.gl.glClear(GL10.GL_COLOR_BUFFER_BIT);
レサム

レンダリングループ内でこれを置く
LeSam

それはうまく機能するはずです(私にとってはうまくいきます)。どの具体的な問題に遭遇しましたか?
ashes999

あなたの声明:「単純な画像があります:クロス、サークル、ボードは、色としてアルファを使用してgimpで作成されたすべてのpngです。」解釈することができる多くの事前乗算アルファのカラーキー透明性から、さまざまな方法。意味を明確にできますか?通常、アルファブレンディング(アルファ透明度)またはアルファテスト(アルファマスク)が必要になります。これらはどちらもデフォルトで有効になっておらず、最新のOpenGLでは2番目はサポートされていません。
アンドンM.コールマン

回答:



2

スプライトを作成し、それにテクスチャを割り当てます。次に、スプ​​ライトsetColorを使用してアルファを調整します。

Texture yourTexture = new Texture("image.png");
sprite = new Sprite(yourTexture);
//RGBA
sprite.setColor(1, 0, 0, 0.2f);

そしてrender()ループでSpriteBatchを使用します

sprite.draw(spriteBatch);

SpriteBatchはDefaultShaderを使用します。透明度を制御する独自のシェーダーを作成する場合は、もちろんOpenGL ES 2.0を有効にする必要があります。
ダニエル

1

入れたら

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();              
}

0

同様に、透明度のある.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();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.