3D シーンで 2D Z インデックスを処理する正しい方法 (DirectX)
-
21-08-2019 - |
質問
次のことを達成する必要があります。
2 つの 2D クワッドは、上下に積み重ねられているように見えますが (同じテクスチャの 2 つの半分のように)、実際には Z 軸上で n 座標ずつ分離されています。そのため、3D オブジェクトがそれらの間を通過すると、半分はオブジェクトの前に表示され、もう半分は後ろに表示されます。
2 つの四角形に直交投影を適用し、残りの 3D データに通常の遠近法を適用することでこれを実現できますか?これにより深度データは失われますか?
私の例が誤解を招きすぎないことを願っています。
解決
クワッドのレンダリング中に z write をオンにしていれば、簡単な答えは「はい」です。明示的に実行しない限り、z データは決して破棄されません。
ただし、直交深度を投影深度とうまく調和させるのは難しい場合があります。(試したことはありませんが、うまく整列しないと思います。)その場合は、次のいずれかを実行するのが最善です。
- すべてのジオメトリをパース ビューでレンダリングします。
- すべてのジオメトリを直交ビューでレンダリングします
- Z テストされていない並べ替えレイヤー (後ろから前) で直交ジオメトリをレンダリングし、その間に透視ジオメトリをレンダリングします。
最初の 2 つの方法の欠点はすでにご存知だと思いますので、それを許容できるかどうかはあなた次第です。3番目の方法が最も伝統的だと思います。
所属していません StackOverflow