1

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

4

1 回答 1

0

你需要几样东西。首先是索引单位球体几何,其次是存储球体实例属性(位置、半径和颜色)的缓冲区,第三是用于 API 参数的小缓冲区。这三个组合在一个“ID3D11DeviceContext::DrawIndexedInstancedIndirect”中

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

gpu 版本将与计算着色器做同样的事情,但会更难实现。优势,零 cpu/gpu 同步,应该支持更多的实例。

于 2013-12-20T09:12:50.220 回答