Unity Mesh(三) Mesh画球

关于画球一开始真是一点思路都没有,楼主也查了好多资料,比较有代表性的是两篇帖子。


一篇是Jasper Flick的帖子,一个很厉害的人:

http://www.binpress.com/tutorial/creating-an-octahedron-sphere/162#comments


这一篇的思路是根据柏拉图体,正八面体分割成的球。


第二篇是OpenGL或者XNA回答的思路,是根据柏拉图体正二十面体画的


http://gamedev.stackexchange.com/questions/31308/algorithm-for-creating-spheres#


如果你能直接看懂上面两篇中的任何一篇,那么楼主下面写的对于你来说都是废话,你可以直接不用看了。


一、思路


简单的说下,首先是画出一个正八面体,这个我们上一篇文章:Unity Mesh(二) Mesh画立方体和八面体,已经写了怎么画正八面体,然后我们的思路是取每条边的重点,细分三角形,比如那正八面体的一个面来说,我们拆分一次的情况如图所示:




两次的情况如图:



以此类推,根据前面两篇我们可以了解到,Mesh画图形必须知道三角形的顶点和三角形的点顺序,这样的话我们需要知道的参数有三个,三角形的顶点数,三角形的个数,三角形的顶点顺序

下面我们根据这三个数据的要求,一次进行计算说明。


二、计算三角形的个数


             我们以正八面体中的一个面为例,我们拆分一次会有四个小三角形(这里不算总共,我们Mesh画以最小单位的三角形画),拆分两次会有16个三角形,这样的话我们假设拆分次数为s(subdivisions),这样每个面会有4^s个三角形,我们的正八面体有八个面,我们一共就有8*4^s个三角形,也就是2^(2s+3)个三角形。


结论:三角形的个数是:2^(2s+3)


三、计算三角形的顶点数


这里我们以四分之一个正八面体为单位进行运算,举列如图:





1次拆分:1+2+1=4
2次拆分:1+2+3+2+1=9
3次拆分:1+2+3+4+5+4+3+2+1=25

以一个面来说我们用r(row)表示三角形的行数,r=2^s就代表一个面的三角形的行数,这样我们四分之一的正八面体有的顶点数为(r+1)^2.

现在我们知道了1/4个正八面体有(r+1)^2.个顶点,但是整个合并不是4*(r+1)^2个顶点,因为我们还要舍去重合的点,为了更好的理解,我在Untiy里放了4个1/4个正八面体来演示合并后的顶点的计算流程。




如图所示,是四个四分之一正八面体,每个单个都有(r+1)^2个顶点,但是当上面两个合并时:
  • 17
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 14
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值