Managed DirectX:テクスチャとテキストを含むスプライトの深さ(Zオーダー)を指定する
-
29-10-2019 - |
質問
マネージドDirectXを使用して、スプライトを使用してテクスチャとテキストを画面に描画しようとしています。残念ながら、テキストとテクスチャを同じスプライトに配置すると、描画コマンドを実行する順序に関係なく、テクスチャがテキストを上書き(上書きしますか?)します。
最終的にはテクスチャとテキストを散在させたいので、これらのスプライトにZオーダーを指定するにはどうすればよいですか。各レイヤーは別々のスプライトにある必要がありますか?
現在のコードは次のとおりです: ジェネラコディセタグプレ
注:SpriteFlags.SortDepthBackToFrontまたはSpriteFlags.SortDepthBackToFrontを使用しても、動作は変わりません。
これはおそらく私の側の概念的な誤解ですが、コードが役立つ場合は、C ++またはその他の言語を使用してアンマネージドDirectXでサンプルを受け入れます。
よろしくお願いします!
解決
レンダリングのZオーダーを変更する場合は、[描画]コマンドでZ値を設定する必要があります。allを0に設定すると、あらゆる種類の奇妙さが発生します。より大きな問題は、DrawTextでは、あらゆる種類のゴミであるZ-Depthを設定できないことです。
したがって、唯一のチャンスはID3DXSprite :: SetTransformを使用することです。関連するz順序位置については、Z座標のみを元に戻す必要があります。したがって、次のように変換を設定できます(単位元行列を使用していると仮定)(C ++の例) ジェネラコディセタグプレ
次に、レンダリングのために(0、0、0)の位置を渡し続けると、テキストもz順序付けの正しい深さを取得します。
お役に立てば幸いです。
他のヒント
これが私(ポスター)が行った答えです:
Gozは、問題を解決するために必要なほとんどの情報を提供しました。基本的に、テクスチャの場合、2番目のVerctor3の3番目のパラメータを使用してzオーダーを指定できます。実験により、(1)z次数が0.0から1.0になり、0.0が最も近く、1.0が最も遠いことが明らかになりました。その範囲外のものはまったく表示されません。
テキストの場合、呼び出しでzを指定する機会がないため、Gozの変換行列の提案を使用する必要があります。
最後に、私が使用したコードは次のとおりです。 ジェネラコディセタグプレ