1

私はしばらくの間DirectXを学んでいて、.objファイルから画面に複数のオブジェクトを描画するようになりました。私の問題は、2つのオブジェクトを描画すると、2番目の描画が1番目の描画の上になることです。

例:
Obj1=段ボール箱
Obj2=キューブ

loadStuff_&_draw(Obj1);  
loadStuff_&_draw(Obj2);

これにより、立方体がボックスの内側/後ろにある場合でも、ボックスの外側/前面に描画されます。

複数のオブジェクトを一緒に描画して、正しく重なるようにするにはどうすればよいですか?

私が知っている唯一の描画物は次のとおりです。

  • 頂点、インデックス、定数バッファをロードします
  • updateSubresource()
  • drawIndexed()

編集:
これは箱の中の立方体の写真です。これは、立方体がボックスの内側ではなく、ボックスの後ろにあることを示しています。また、ボックスの縁がボックスの後ろでクリップしていることも示しています。何が起こったのかわからない。

立方体を描いてから、中空の箱を描きました。

ボックス内の立方体のレンダリング

4

2 に答える 2

1

これが、深度バッファー (Z バッファーと呼ばれることもあります) の目的です。1 つのオブジェクトの描画中にピクセルを書き込むと、そのピクセルの視点からの距離が深度バッファーに記録されます。次に、そのピクセルにも書き込む 2 番目のオブジェクトを描画すると、そのピクセルでの新しいオブジェクトの深度値を (以前のオブジェクトからの) バッファリングされた値と比較でき、新しい値が古い値より近い場合にのみピクセルを上書きします。 1。ピクセルが描画されると、深さの値が更新され、より近い値が反映されます。

これを実装する方法についていくつかのアイデアを提供するいくつかのリンク:

http://msdn.microsoft.com/en-gb/library/windows/desktop/bb205074%28v=vs.85%29.aspx

http://www.rastertek.com/dx11tut35.html

https://stackoverflow.com/a/8641210/28875

于 2012-11-06T23:30:26.837 に答える
-1

これは、オブジェクトのワールド マトリックスをどのように設定するかによって異なります。最初のオブジェクトの後ろに 2 番目のオブジェクトを配置する場合は、描画する前に正しいワールド マトリックスを設定します。object 1 が origin(0, 0, 0) にあると仮定すると、object2 を (0, 0, -10) に変換して object1 の背後に配置できます。(0, 0, 10) に変換すると、object1 の前になります。

于 2012-11-02T01:39:18.527 に答える