Ric*_*ral 4 c++ opengl bounding-volume
我已经设法以两种方式计算边界球半径,但没有一种方法能准确地给我想要的东西。我不需要“像素”完美边界球体,但我想要比我目前拥有的更好的东西。
我正在使用 Wavefront .obj 模型并计算这些模型的边界球半径,我提取当前模型尺寸(我使用的是 Nate Robbins 的 GLM 库),这将为我提供每个轴上的尺寸。
第一种方法:将 每个轴除以 2,这将给我每个轴上的半径。最大的是我将用于我的边界球体的那个。这适用于特定于我的项目的大多数对象。它不适用于某些人,例如立方体形状的。基本上,如果我有一个立方体并用这种方法计算半径,球体会将立方角留在外面。
第二种方法:将 每个轴除以 2,这将给出每个轴上的半径。然后我这样做是为了取出边界球体的半径:
r = SQRT(x*x + y*y + z*z)
Run Code Online (Sandbox Code Playgroud)
但这给了我一个相当大的半径。对象将完全封闭在球体中,但球体非常大,超出了它应有的大小。
我不明白我在上面的公式中做错了什么,据我所知,它应该有效。但我显然错了...
您的第二种方法应该为您的边界框提供边界球体,但正如您发现的那样,它比框以外的任何东西都大。
通过平移模型点可以找到更好的边界球体,使它们使用您已有的边界框尺寸以原点为中心,然后使用公式为每个单独的顶点计算从该点的原点开始的半径sqrt(x*x + y*y + z*z)
。其中最大的是您的边界球体的半径。
请注意,这不是最佳边界球体。为此,您必须找到模型的凸包并使用诸如旋转卡尺之类的东西来选择球体的最佳中心点。
为了在 2D 中显示它,红色轮廓是形状的边界框,蓝色圆圈是框的边界圆。使用多边形顶点的改进圆,以框为中心是绿色的。请注意,黑色多边形的任何点都不与蓝色圆圈接触。
归档时间: |
|
查看次数: |
6730 次 |
最近记录: |