在给定位置和半径的情况下,如何在D3D11中绘制球体?

时间:2019-01-28 11:05:55

标签: c++ graphics direct3d direct3d11

要绘制一个球体,除了位置和半径之外,不需要了解其他任何内容。因此,除非需要每个顶点的颜色或其他此类特征,否则通过三角形网格渲染球体的效率非常低。尽管进行了谷歌搜索,搜索D3D11 documentation和阅读Introduction to 3D Programming with DirectX 11,但我还是听不懂

  1. 是否可以通过仅将球的位置和半径传递到GPU来绘制球?
  2. 如果没有,我被误解的主要原则是什么?
  3. 如果是,该怎么做?

我的最终目标是稍后传递更多的参数,以供着色器效果使用。

3 个答案:

答案 0 :(得分:1)

您将需要实现Geometry Shader。此着色器应将“球面”中心和半径作为输入,并发出一系列顶点以进行栅格化。通常将其称为点精灵。

答案 1 :(得分:0)

一种选择是使用镶嵌。

https://en.wikipedia.org/wiki/Tessellation_(computer_graphics)

大部分混乱将在GPU端生成。

注意: 最后,您还有更多参数发送给着色器,因为球体将被拆分为三角形,每个三角形将分别在屏幕上呈现。 但是拆分是在GPU端完成的。

答案 2 :(得分:0)

虽然可以从GPU上的点和顶点创建球体,但这通常不是很有效。使用高端GPU,您可以使用“硬件细分”,但最好还是采用其他方式。

更好的解决方案是使用实例化并渲染按比例缩放到不同位置和大小的球形几何体的相同VB / IB。