使用顶点着色器计算球体的边界四边形

Ben*_*nes 8 opengl geometry vertex-shader fragment-shader

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

有没有猜到他们实际上是怎么做到的?位置和半径在世界坐标中是已知的,投影是透视的.这是否意味着球体将被投影为圆圈?

Xav*_* Ho 2

我找到了一篇描述您需要什么的论文 - 计算边界二次函数。看:

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

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

一些个人想法:

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

如果你能算出弦长,那么比率将产生精确的答案,但目前这有点超出我的能力范围。

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

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

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