2017-04-17 16 views
1

ゲームエンジンを作りたいと思っています.3DオブジェクトとGUI(イミディエイトモード)を同時に描画しなければならないことに気付きました。DirectXで正射影投影と透視投影行列を同時に使用できますか?どうやって?

3Dオブジェクトは透視投影行列を使用し、GUIは2D空間にありますので、私は正射投影行列を使用する必要があります。

どのように実装すれば誰でも私を導きます。私はプロのグラフィックプログラマーの一人ではありません。

また、DirectX 11を使用していますので、そのまま使用してください。

ありがとうございました。

+0

一般に、一度に1つの投影行列しか使用しませんが、別々の行列を使用して、それぞれ同じレンダーターゲットに複数のレンダーパスを描画できます。 DirectX 11を初めてお使いになるには、[DirectX Tool Kit](https://github.com/Microsoft/DirectXTK/wiki/Getting-Started)をご覧ください。 –

答えて

0

「私は同じ時間に描画する」と答える前に、ID3D11DeviceContext::Draw(またはDrawIndexed/DrawAuto /など)を一度呼び出してすべての描画を行うことを意味します。あなたは何か違うことを意味するかもしれない。

が必要です同時に正投影と透視投影でオブジェクトを描画することはありませんが、これはあまり一般的ではありません。

一般に、投影行列は、シェーダ定数を介して(またはしばしばワールド、ビュー、および投影行列の連結を介して)頂点シェーダに提供される。パースペクティブオブジェクトを描画するときは、1つの定数セットをバインドし、正書法を描画するときは、異なるオブジェクトを設定します。パースペクティブオブジェクトと直交オブジェクトは、一般に完全に異なるプロパティ(照明など)を持つため、異なるシェーダが頻繁に使用されます。

は、2種類のオブジェクトを同時に描画することができます。これを実現する方法はいくつかあります。直接的な方法は、両方の投影行列を頂点シェーダに提供し、どの投影行列を使用するかを決定する追加の頂点ストリームを持つことです。

一部のエッジケースでは、このようなバッチ処理のパフォーマンスがいくらか低下することがあります。私はあなたがそれを行うことを示唆していません。あなたの人生をより楽にし、正体および遠近オブジェクトに対して別々の描画呼び出しを使用します。

関連する問題