6

libgdx バージョン 0.9.9 を使用しています。他の 3D モデルと一緒に 3D 空間で ParticleEffect を使用して火の効果をレンダリングしたいと考えています。

私のコードの論理フロー:

  1. ModelBatch開始
  2. ModelBatch を使用して Bullet World のすべての 3D モデルをレンダリングする
  3. モデルバッチ終了
  4. SpriteBatch開始
  5. SpriteBatch を使用して ParticleEffect (effect.draw) を使用して火のエフェクトをレンダリングします。
  6. SpriteBatch終了
  7. ステージを使用して HUD を描画する

問題: 3D 空間のある点で火の効果がうまくレンダリングされます。しかし、3D モデルがカメラと火の効果の間にあるようにカメラを回転させると、火の効果が 3D モデルの後ろに隠れるのではなく、3D モデルの上にレンダリングされます。

私が試したこと:

  1. 最初に SpriteBatch をレンダリングしてから 3D モデルをレンダリングしようとしました。この場合、火の効果は表示されません。3D モデル (レイヤー) が火の効果 (レイヤー) の上にレンダリングされているため、効果が表示されていないと推測しています。
  2. ステップ 1 と 3 の間で SpriteBatch をレンダリングしてみました。つまり、modelbatch.begin と modelbatch.end の間で SpriteBatch をレンダリングしました。この場合、火の効果はまったく見えません。
  3. Particle Effect をアクタ (HUD ステージに追加) としてレンダリングしてみました。予想どおり、火のエフェクトは最上位の HUD レイヤーの一部としてレンダリングされ、同じ問題が残ります。
  4. デカールを調べてみましたが、パーティクル エフェクトが DebcalBatch で機能しないことがわかりました。アニメーション化された火の .gif をデカールの上に表示したくなかったので、試しませんでした。

誰かが同様の問題に直面しましたか?ParticleEffect を 3D ワールドの一部として動作させ、他の 3D モデルによってブロックされたときに非表示になるようにするための推奨される回避策はありますか? Xoppa が YouTube に投稿した、libgdx の 3D パーティクルに関するビデオを見たことがありますが、言及されている手順や解決策はありません。どんな助けでも大歓迎です。

4

2 に答える 2

0

SpriteBatch が次のレンダリング順序で表示されなかった理由:

  1. SpriteBatch を使用してパーティクル エフェクトをレンダリングする
  2. 3D モデルのレンダリング

これは、3D モデルが SpriteBatch に重なる Skydome で構成されていたため、完全に隠されていたためです。上記のステップ 2 でレンダリングされた 3D モデルのセットから Skydome を取り出し、パーティクル エフェクトの前にレンダリングしています。

次のレンダリング順序は私にとってはうまくいきます:

  1. ModelBatch を使用して Skydome をレンダリングする
  2. SpriteBatch を使用してパーティクル エフェクトをレンダリングする
  3. ModelBatch を使用して残りのモデルをレンダリングする

これにより、パーティクル エフェクトは空の前にありますが、3D モデルの後ろにあります。

于 2014-02-03T03:10:11.007 に答える
0

火を上ではなく後ろに表示したい場合は、最初にスプライトバッチをレンダリングする必要があります。問題は、3D でレンダリングするときに画面が自動的にクリアされることです。これにはいくつかの方法があります。

最初のプロセスだけが画面をクリアすることを確認することができます。

これはコードです:

Gdx.graphics.getGL20().glClearColor( 1, 0, 0, 1 );
Gdx.graphics.getGL20().glClear( GL20.GL_COLOR_BUFFER_BIT | GL20.GL_DEPTH_BUFFER_BIT );

残念ながら、3D レンダラーがそれを内部的に呼び出していて、それを制御できない場合は、少し窮地に陥っています。(使用しているライブラリ コードまたは独自のコードの量がわかりません)

代わりに両方をフレーム バッファ オブジェクトにレンダリングすることをお勧めします。そうすれば、2 つのフレーム バッファ オブジェクトからの画像を 2D テクスチャとして画面にレンダリングできます。次に、必要に応じてそれらの間でブレンドを使用するか、アルファを設定するか、ブレンドを無効にして、一方が他方の上にあるようにすることができます。ただし、必要な順序でレンダリングするようにしてください。

http://libgdx.badlogicgames.com/nightlies/docs/api/com/badlogic/gdx/graphics/glutils/FrameBuffer.html

于 2014-01-06T22:34:54.460 に答える