当前位置:  开发笔记 > IOS > 正文

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

如何解决《如何生成细分的二十面体?》经验,为你挑选了3个好方法。

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



1> Mark Pattiso..:

有一个教程在这里.

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

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



2> Brad Larson..:

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


这段代码的作用:添加一个简单的icosphere,细分,然后归一化 - 不能给出精确均匀的分布(三角形会稍微小一点,更接近原始顶点).

3> 小智..:

为了测量球体,大多数人线性地细分点,但这不会产生圆形.

对于圆形细分,通过一系列旋转旋转两个点.

    将z周围的第二个点(通过点1的z角)旋转为0

    将y周围的第二个点(通过点1的y角)旋转到0(这在逻辑上将点1置于北极点).

    将z周围的第二个点旋转到0(这在逻辑上将点1放在x/y平面上,现在变为单位圆).

    找到半角,计算新的第3点,第3点的x和y.

    对步骤3),2)和1)按相反顺序执行反向旋转,以将第3点定位到其目的地.

对于每个近0位置附近的值,还有一些数学考虑因素,例如北极和南极,以及最右边和最左边,最前面和最后面的位置,所以首先检查这些值和如果它们在那些位置,则执行pi/4(45度)的额外旋转.这可以防止浮点数学库吓坏并为atan2()和其他trig函数生成粗略的字符外值.

希望这可以帮助!:-)

推荐阅读
mobiledu2402851323
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有