2009-02-18 29 views
8

我在这里问了一些问题,看到这个几何形状在其他测地线形状中被提及过几次,但我很好奇我怎样才能生成一个关于xyz的点?如何生成细分的二十面体?

+2

有一个教程[这里](http://www.donhavey.com/blog/tutorials/tutorial-3-the-icosahedron-sphere/)。 – 2009-02-18 13:50:20

回答

9

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

10

有一个教程here

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

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

+0

现在添加了链接文章的摘要(我不认为我在6年前就知道这个规则......) – 2015-04-10 15:40:33

+0

抱歉,这是来自审查队列的回复 - 我甚至没有注意到'09年在答案上盖章。感谢更新。 – LittleBobbyTables 2015-04-10 15:45:04

7

要计算一个球体,大多数人将线性细分,但不会产生圆形。

对于一个圆角的tesselation,旋转两个点通过一系列的旋转。

  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函数生成大量字符外值。

希望这有助于! :-)

相关问题