绘制多个对象

时间:2012-11-01 16:56:14

标签: c++ directx directx-11

我一直在学习DirectX一段时间了我到了从.obj文件中将多个对象绘制到屏幕上的重点。我的问题是,如果我绘制2个对象,第二个绘图将位于第1个顶部。

例:
Obj1 =纸板箱
Obj2 = Cube

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

即使它在/后面,也会在框外/前面绘制立方体。

如何将多个对象绘制在一起以便它们正确重叠?

我所知道的唯一绘图是:

  • 加载顶点,索引,常量缓冲区
  • updateSubresource()
  • drawIndexed()

修改
这是一个盒子里的立方体图片。它表明立方体在盒子后面而不是在盒子里面。它还显示盒子的边缘夹在盒子后面。不确定发生了什么。

我画了立方体,然后画了空心框。

Render of a cube in a box

2 个答案:

答案 0 :(得分:1)

这就是深度缓冲区(有时称为z缓冲区)的用途。在绘制一个对象期间写入像素时,它会记录深度缓冲区中该像素的视点距离。然后,当您绘制第二个也会写入该像素的对象时,它可以将该对象的新对象深度值与缓冲值(来自之前的对象)进行比较,并且只有在新值接近旧值时才覆盖像素。一。如果绘制了像素,则更新深度值以反映更接近的值。

某些链接可能会为您提供有关如何实现此目的的一些建议:

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

答案 1 :(得分:-1)

这取决于你如何设置对象的世界矩阵,如果你想在第一个对象后面的第二个对象,那么在绘制之前设置正确的世界矩阵。假设对象1位于原点(0,0,0),那么您可以将object2转换为(0,0,-10)以使其位于object1之后。并转换为(0,0,10)将使它在object1前面。