1

私は現在、DirectDrawシステム(ええ、それは非常に古いです)からDirectX10にアップグレードしています。これは2Dシステムですが、各オブジェクトの範囲/深度がメートル単位であるため、実世界をシミュレートします。最も遠いzオーダーでレンダリングおよび保持される背景画像があります。他のすべてのオブジェクトはその上に描画され、範囲/深さに応じてスケーリングされます。ただし、ポリゴンとして定義され、レンダリングが少し異なる特定のタイプのオブジェクトがあります。それは目に見えないオクルーダーとして機能します。たとえば、オクルーダーは範囲/深度が40(私の単位はメートル)で、ビューポートの中央にある5つの頂点(五角形)によって定義されます。同じビューポート位置にあるが、範囲/深度が50のスプライトオブジェクトがあります。必要な出力は、スプライトオブジェクトをレンダリングしないことです。しかし、背景は両方を通して見る必要があります。したがって、本質的に、これらは背景を遮らないことを除いて、目に見えないオクルーダーです。

注意として、オクルーダーとスプライトはすべて同じベースオブジェクトタイプから派生し、深度ソートされたコンテナで一緒に混合されます。

私のアイデアは、オクルーダーのRenderメソッドをオーバーライドして、範囲/深度の値を書き込むレンダーターゲットに描画することでした。次に、スプ​​ライトを通常どおりにレンダリングしますが、頂点シェーダーまたはピクセルシェーダーでは、スプライトの範囲値をレンダリングターゲットの範囲値と比較します。ただし、Presentが呼び出される前に、同じパスでレンダーターゲットから読み取り/書き込みを行う必要があるように思われますが、それは未定義です。オクルーダーをレンダリングし、レンダリングターゲットのバインドを解除し、他のオブジェクトによるルックアップのためにテクスチャを渡す場合は、スプライトの位置をそのテクスチャスペースに変換する必要があります。これは重要な場合があります。これらの方法のいずれかが可能ですか?

それについてもう少し考えた後、もう1つのアイデアが思い浮かびました。オクルーダーを取り、背景テクスチャを参照してテクスチャ座標を設定することができます。このようにして、背景と同じ色の値を描画します。スプライトが背後にある場合は並べ替えのため、ユーザーには「背景」が表示されますが、実際にはそのように見えるオクルーダーです。

これが質問ではなく、大声で考えている場合は申し訳ありませんが、これについての最善の方法についての印象やアイデアを入手したいと思いました。私には選択肢があるようですが、どれが最も効率的でどれが最も簡単かはわかりませんでした。ご回答ありがとうございます。

4

1 に答える 1

0

私のコメントで述べたように、背景画像を参照してテクスチャ座標を設定し、単純なポリゴンであるオクルーダーが適切に三角形化され、それらのテクスチャ座標を利用できるようにしました。

于 2012-12-18T18:17:08.053 に答える