如何生成细分的二十面体?

时间:2009-02-18 13:47:05

标签: algorithm math geometry

我在这里问过一些问题,并看到这个几何形状在其他测地线形状中提到了几次,但我很好奇我究竟会如何生成一个关于xyz的点呢?

3 个答案:

答案 0 :(得分:11)

有一个教程here

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

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

答案 1 :(得分:9)

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

答案 2 :(得分:7)

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

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

  1. 围绕z(第1点的z角)旋转第二个点为0
  2. 将y周围的第二个点(通过点1的y角度)旋转为0(这在逻辑上将点1置于北极点)。
  3. 将z周围的第二个点旋转为0(这在逻辑上将点1放在x / y平面上,现在变为单位圆)。
  4. 找到半角,计算新第3点的点x和y,点3。
  5. 按步骤3),2)和1)的相反顺序执行反向旋转,将第3点定位到目的地。
  6. 对于每个近0位置附近的值,还有一些数学考虑因素,例如北极和南极,以及最右边和最左边,最前面和最后面的位置,所以检查如果他们在那些位置,那么首先进行pi / 4(45度)的额外旋转。这可以防止浮点数学库吓坏并为atan2()和其他trig函数生成粗略的字符外值。

    希望这有帮助! :-)