Stage3Dで3D宇宙ゲームを作成していますが、他のすべてのオブジェクトの背後に星のフィールドを描画したいと思います。私が直面している問題は、関係する距離が非常に長いことだと思います。星が他のオブジェクトよりも本当に遠くにある場合は、正しくレンダリングされない程度にスケーリングする必要があります。特定のサイズを超えると、顔がちらつくように見えます。これは、必要なサイズ(1200〜100000ユニット)にスケーリングすると、私の惑星メッシュでも発生します。カメラに向けて、平面テクスチャに星をレンダリングしています。スケールアップしすぎない限り、遠くにある他のオブジェクトの前にあることは明らかですが、うまくレンダリングされます。私はあらゆる種類のdepthTestModes(Context3DCompareMode.LESS、Context3DCompareMode)を試しました。GREATERおよびその他すべて)zバッファにメッシュを含めたり除外したりすることと組み合わせて、運がなくても星が表示される場所に他のピクセルが存在しない場合にのみ星をレンダリングします。誰かが私がこれをどのように達成できるか知っていますか?あるいは、さらに良いことに、特定のサイズを超えるメッシュが適切にレンダリングされない理由を知っていますか?気づいていない任意の上限はありますか?
3 に答える
Stage3Dはわかりません。ここでは、OpenGL言語で話していますが、背景/スカイボックスを描画する通常の方法は、背景を遠くではなく近くに描画し、最初に背景を描画し、深度バッファの書き込みを無効にすることです。背景が描画されているか(深度バッファリング自体が必要ない場合)、背景が描画された後、通常のシーンが描画される前に深度バッファをクリアします。
惑星のちらつきは、深度バッファの解像度が不足していることが原因である可能性があります。その場合は、次のいずれかを選択する必要があります
- オブジェクトをカメラに近づけて描画し、
- カメラの錐台を平面の近くで遠ざけるか、遠い平面に近づける(これにより、シーン全体で深度バッファーの解像度が向上します)、または
- 相互に排他的な深度範囲でシーンを複数回レンダリングします(これは深度ピーリングと呼ばれます)。
投影と頂点シェーダーの出力がどのように行われるかを確認する必要があります。頂点シェーダーの出力には、x、y、z、wの4つのコンポーネントがあります。それから、ピクセル座標が計算されます。
x'= x / w
y'= y / w
z'= z / w
z'は、最終的にzバッファに格納されるものです。したがって、頂点シェーダーの最後にz = w * valueを置くだけで、任意の定数値を出力できます。値=.999を入力するだけで、完了です。通常の深度レステストが機能します。
ムクドリを使用する必要があります。それは働くことができます
http://www.adobe.com/devnet/flashplayer/articles/away3d-starling-interoperation.html http://www.flare3d.com/blog/2012/07/24/flare3d-2-5-starling-integration //