Unity如何用网格绘制一个正五边形

来源:互联网 发布:php pack 打包字符串 编辑:程序博客网 时间:2024/04/30 03:31
网格绘制其实非常简单,只要我们把握好顶点的位置,顶点索引的顺序就可以绘制出自己想要的网格。
绘制一个正五边形,我们必须先把五个顶点的坐标都算出来,我们就按以下这种情况来说明以下:
熟悉三角函数的朋友一定可以非常容易的求出每个点的坐标了,在这里具体过程就不列举了,最后求出五个点的坐标分别是(0,0)(cos36,sin36)(2cos36,0)(cos72+1,-sin72)(cos72,-sin72)
我们这里的坐标是按顺时针来纪录的,从原点开始。
在这里我们需要注意一点,三角形顶点索引的顺序决定了三角形是正面还是反面,在Unity坐标空间中,顺时针的索引代表正面,反之则是反面,我们设刚才的五个点分别是A,B,C,D,E,那么我们构成五边形的三个三角形就是A-B-C,A-C-D,A-D-E
接下来就是我们调用Mesh的公开的属性来绘制网格了,代码如下:
usingUnityEngine;
publicclassExampleClass:MonoBehaviour
{
   privateVector3[] newVertices; 
   privateint[] newTriangles;
   voidStart()
    {
        newVertices =newVector3[5] {Vector3.zero,newVector3(Mathf.Cos(Mathf.Deg2Rad * 36), 0, Mathf.Sin(Mathf.Deg2Rad * 36)), newVector3(2 *Mathf.Cos(Mathf.Deg2Rad * 36), 0, 0), newVector3(Mathf.Cos(Mathf.Deg2Rad * 72)+1, 0, -Mathf.Sin(Mathf.Deg2Rad * 72)), newVector3(Mathf.Cos(Mathf.Deg2Rad * 72), 0, -Mathf.Sin(Mathf.Deg2Rad * 72)) };
        newTriangles =newint[9] { 0, 1, 2,0,2,3 ,0,3,4};
       Meshmesh =newMesh();
        mesh.vertices = newVertices;       
        mesh.triangles = newTriangles;      
        GetComponent<MeshFilter>().mesh = mesh;
       
    }
}
我们只需要将脚本挂载有MeshFilter组件的物体上就可以使用了。其实绘制网格最关键的就是搞清楚构成三角形时顶点的顺序,如果还有不同的绘制方法或者更好的算法欢迎讨论<毕竟绘制一个五边形还得求五个点坐标,感觉这个方法好麻烦:(>
原创粉丝点击