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

标签 opengl geometry fragment-shader vertex-shader

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

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

最佳答案

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

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

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

一些个人想法:

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

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

alt text http://xavierho.com/temp/Sphere-Screen-Space.png

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

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

关于opengl - 使用顶点着色器计算球体的边界四边形,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2727164/

相关文章:

oracle - 如何将几何字段从 postgresql(PostGIS) 迁移到 sdo 几何字段 oracle

c++ - 写入超过 1 个输出的片段着色器错误

ios - Metal或OpenGLES中的片段着色器中的共享变量

OpenGL 着色器节点编辑器

c++ - 如何将opengl进程绑定(bind)到具体的gpu卡上?

c++ - 使用opengl显示3D点

c++ - OpenGL glBufferData -> 为什么 &vertices[0] 而不是 &vertices 作为数据参数?

opengl - gl_NormalMatrix

c# - 如何进行正确的多边形旋转? (在 C# 中,尽管它适用于任何事物)

geometry - 如何检测两条线段相交的位置?