2013-12-15 97 views
1

我正在寻找一种有效的方式来使用directx 11显示大量球体。球体由(x,y,z,r)定义,其中(x,y,z)是空间坐标,r是半径。我只想显示可以看到的球体,这意味着不在视野内的球体和太小以至于看不见的球体都不会被绘制。但是,如果一组小于一个像素的球体至少与一个像素一样大,那么我想要显示最主要的颜色。球体只有一种颜色和不同级别的透明度。任何帮助将不胜感激,不完整的答案可以接受。Directx 11球体

回答

0

你需要几件事情。首先是索引单位球体几何体,第二个是存储球体实例属性(位置,半径和颜色)的缓冲区,第三个是API参数未来的小缓冲区。这三个组合在一个'ID3D11DeviceContext :: DrawIndexedInstancedIndirect'

剩下的问题是“如何提供实例缓冲区?”。 cpu很简单,只需应用截锥体剔除,由于透明度而重新排序,并根据屏幕投影应用合并,更新缓冲区并使用'ID3D11DeviceContext :: DrawIndexedInstanced'。

gpu版本会对计算着色器做同样的事情,但实现起来会比较困难。优点,零CPU/GPU同步,并应支持更多的实例。