9

我在这里问了一些问题,并且在其他测地线形状中多次提到过这个几何形状,但我很好奇我将如何准确地生成一个关于点 xyz 的几何形状?

4

3 回答 3

11

这里有教程。

基本思想是从一个二十面体(有 20 个三角形面)开始,然后将每个三角形面反复细分为更小的三角形。在每个阶段,每个新点都会径向移动,因此它与中心的距离是正确的。

阶段的数量将决定生成多少个三角形,从而确定生成的网格与球体的接近程度。

于 2009-02-18T13:50:20.183 回答
9

是我用于细分二十面体的一个参考,基于 OpenGL 红皮书。我的 iPhone 应用程序Molecules的 BSD 许可源代码包含用于生成简单二十面体并将它们加载到 OpenGL ES 的顶点缓冲区对象中的代码。我还没有合并细分来提高渲染质量,但它在我的计划中。

于 2009-02-18T13:55:54.447 回答
7

为了细分球体,大多数人将点线性细分,但这不会产生圆形。

对于圆形镶嵌,通过一系列旋转旋转两个点。

  1. 将第二个点绕 z 旋转(按点 1 的 z 角)到 0
  2. 围绕 y 旋转第二个点(通过点 1 的 y 角)到 0(这在逻辑上将点 1 置于北极)。
  3. 将围绕 z 的第二个点旋转到 0(这在逻辑上将点 1 放在 x/y 平面上,现在变成单位圆)。
  4. 求半角,计算新的第 3 点,即第 3 点的 x 和 y。
  5. 以相反的顺序执行步骤 3)、2) 和 1) 的反向旋转,以将第 3 个点定位到其目的地。

对于每个接近 0 的位置附近的值也有一些数学考虑,例如北极和南极,最右边和最左边,最前面和最后面的位置,所以首先检查这些和如果它们在这些位置,则执行 pi/4(45 度)的额外旋转。这可以防止浮点数学库出现异常并为 atan2() 和其他 trig 函数生成大量不合字符的值。

希望这可以帮助!:-)

于 2011-03-18T12:04:16.050 回答