Geometry Directx 11球体

Geometry Directx 11球体,geometry,directx-11,culling,frustum,Geometry,Directx 11,Culling,Frustum,我正在寻找一种使用directx 11显示大量球体的有效方法。球体由x,y,z,r定义,其中x,y,z是空间坐标,r是半径。我只想显示可以看到的球体,这意味着不在视野内的球体和太小而看不见的球体将不会被绘制。但是,如果一组小于一个像素的球体至少与一个像素一样大,那么我希望显示最主要的颜色。球体只有一种颜色和不同的透明度级别。任何帮助都将不胜感激,不完整的答案是可以接受的。您需要几样东西。首先是一个索引单位球体几何体,第二个是一个缓冲区,用于存储球体实例属性位置、半径和颜色,第三个是一个小缓冲区,

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

您需要几样东西。首先是一个索引单位球体几何体,第二个是一个缓冲区,用于存储球体实例属性位置、半径和颜色,第三个是一个小缓冲区,用于存储尚未出现的API参数。三者结合在一个“ID3D11DeviceContext::DrawIndexedInstancedIndirect”中

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

gpu版本将对计算着色器执行相同的操作,但更难实现。优点是,零cpu/gpu同步,应该支持更多的实例