8

我正在尝试从图形纸中实现一种算法,并且该算法的一部分是将已知半径的球体渲染到缓冲区。他们说他们通过在顶点着色器中计算位置和大小来渲染球体,然后在片段着色器中进行适当的着色。

关于他们实际上是如何做到这一点的任何猜测?位置和半径在世界坐标中是已知的,投影是透视的。这是否意味着球体将被投影为圆形?

4

3 回答 3

2

我找到了一篇描述你需要什么的论文——计算边界二次曲线。看:

http://web4.cs.ucl.ac.uk/staff/t.weyrich/projects/quadrics/pbg06.pdf

第 3.2 节,边界框计算。该论文还提到在顶点着色器上执行此操作,因此它可能就是您所追求的。

一些个人想法:

不过,您可以通过用球体的半径来近似球体的大小来近似边界框。将其转换为屏幕空间,您会得到一个比正确边界框稍大的边界框,但不会相差那么远。当然,当相机离点太近,或者球体太大时,这会失败。但否则应该是非常优化的计算,因为它只是两个相似的直角三角形之间的比率。

如果你能算出和弦长度,那么这个比例就会得到准确的答案,但目前这有点超出我的想象。

替代文字 http://xavierho.com/temp/Sphere-Screen-Space.png

当然,这只是一个粗略的近似,有时会有很大的误差,但它会让事情进展得很快,很容易。

否则,请参阅上面链接的论文并使用正确的方法。=]

于 2010-04-28T07:47:45.377 回答
1

球体将被投影为椭圆,除非它像 Brainjam 所说的那样位于相机中心。

Xavier Ho 链接到的文章描述了球面投影的泛化(即二次投影)。这是一本非常好的读物,我也推荐它。但是,如果您只对球体投影感兴趣,更准确地说是对投影边界的四边形感兴趣,那么鲁棒模板阴影的力学,第 6 页:剪刀优化详细介绍了如何进行。

关于 Xavier Ho 近似的注释

我想补充一点,正如他所指出的,Xavier Ho 建议的近似值非常近似。我实际上将它用于基于图块的前向渲染器,以近似屏幕空间中的光边界。下图显示了它如何在一个场景中使用 400 个全向(球形绑定)灯巧妙地实现良好性能:基于 Tile 的渲染 - 远视图。然而,就像 Xavier Ho 预测的那样,光边界的不准确会导致近距离的伪影,如放大时所示:基于 Tile 的渲染 - 关闭视图。重叠的四边形无法完全约束灯光,而是剪掉了边缘,露出了瓷砖网格。

于 2012-08-24T16:29:41.950 回答
0

一般来说,球体在透视图中被视为椭圆:

替代文字
(来源:jrank.org

上图在本文底部

本文的第 6 节描述了如何获得球体投影的边界梯形。在计算机之前,艺术家和绘图员必须手工解决这个问题。

于 2010-04-28T14:47:36.130 回答