2010-12-02 9 views
4

私はJava 3Dでゲームを進めており、ユニットの上にマウスを置く健康バーを実装しています。Java 3Dシーンで健康が損なわれていないバーを描く

ユニットの位置より上の3Dポイントでクワッドを描き、常にカメラに向かうようにビルボードの動作を適用することから始めました。

しかし、私が抱えている問題は、健康バーが他の風景によって隠されることがあることです。

は、だから私は、次のオプションを検討している:

  1. はレンダラを作るためにヘルスバーのピクセルのためのZ /デプスバッファ値をオーバーライド彼らはそれがその後のレンダリング何よりもカメラに近いだと思います。

    私はrenderingAttributes.setDepthTestFunction(RenderingAttributes.ALWAYS)を試しました。レンダラーは、以前に同じ領域に描画されたものの上にヘルスバーを描画しますが、後で他のシーンをヘルスバーの上に描画すると役立ちません。

    Java 3Dでこれを行うより良い方法はありますか?

  2. 健康バーの3D位置をカメラの前の2D平面に投影します。私はこれに必要なすべての数学の再発明を開始する前に、誰かが既存の解を指摘できるかもしれない。

  3. Java 3DからLWJGLやjMonkeyEngineに切り替える(この問題だけでなく、Java 3Dが死んでいるなどの一般的な苦情)。私は彼らがこの特定の問題に対してより柔軟性があるかどうかは確信していませんが。そして、私が読んだことから、ゲーム開発の最悪の間違いの1つは、開発の途中でエンジンを切り替えることです。

答えて

3

使用painter's algorithm:あなたはシーンの残りの部分を描いた後にヘルスバーを引く(とZのテストではもちろん、オフ)。

+0

OrderedGroupを使用してJava 3Dでこれを行う方法があるようです。 しかし、これはメンテナンスの問題を引き起こすでしょう。現在、ユニットの上にヘルスバーを配置する最も簡単な方法は、ユニットと同じTransformGroupに配置することです。しかし、私が他のすべての風景からすべてのヘルスバーを分離する必要がある場合は、それらをより高いレベルで分割し、ユニットに適用されるヘルスバーに同じ一連の変換を適用する必要があります。 これは実行可能ですが、おそらくより洗練されたソリューションがあります。 – mjomble

関連する問題