使用十二面体画球体

 

当做一个地球的时候,可以使用六面体,八面体和20面体来画一个球体,它们的算法都是相同的,下面是20面体画球体的代码

欧拉定理(欧拉公式) V + F- E = 2 (简单多面体的顶点数 V,棱数 E 和面数 F).

1、这种方法的原理是:

  对每一个三角面进行一次

 public GameObject GetSphere(int subdivision = 5, float radius = 1.0f)
    {
        GameObject go = new GameObject ("Pentagon");
        MeshFilter filter = go.AddComponent<MeshFilter> ();
        
        Mesh mesh = new Mesh();
        filter.mesh = mesh;
        List<Vector3> vertices = new List<Vector3>()
        {
            new Vector3(0.000000f, -1.000000f, 0.000000f),
            new Vector3(0.723600f, -0.447215f, 0.525720f),
            new Vector3(-0.276385f, -0.447215f, 0.850640f),
            new Vector3(-0.894425f, -0.447215f, 0.000000f),
            new Vector3(-0.276385f, -0.447215f, -0.850640f),
            new Vector3(0.723600f, -0.447215f, -0.525720f),
            new Vector3(0.276385f, 0.447215f, 0.850640f),
            new Vector3(-0.723600f, 0.447215f, 0.525720f),
            new Vector3(-0.723600f, 0.447215f, -0.525720f),
            new Vector3(0.276385f, 0.447215f, -0.850640f),
            new Vector3(0.894425f, 0.447215f, 0.000000f),
            new Vector3(0.000000f, 1.000000f, 0.000000f),
        };
        int[] triangles =
        {
            0, 1, 2,
            1, 0, 5,
            0, 2, 3,
            0, 3, 4,
            0, 4, 5,
            1, 5, 10,
            2, 1, 6,
            3, 2, 7,
            4, 3, 8,
            5, 4, 9,
            1, 10, 6,
            2, 6, 7,
            3, 7, 8,
            4, 8, 9,
            5, 9, 10,
            6, 10, 11,
            7, 6, 11,
            8, 7, 11,
            9, 8, 11,
            10, 9, 11
        };

        for (int s = 0; s < subdivision; s++)
        {
            
            //这将存储连接中已经存在的所有顶点,因此不存在重复/重叠的顶点
            List<VertOnEdge> connected = new List<VertOnEdge>();

            //细分后的面数
            int[] newTriangles = new int[triangles.Length * 4];
            //遍历三角形面数
            for (int i = 0; i < triangles.Length / 3; i++)
            {
                //获取一个面的三个顶点
                int A = triangles[i * 3];
                int B = triangles[i * 3 + 1];
                int C = triangles[i * 3 + 2];

                int ab = -1;
                int bc = -1;
                int ca = -1;
                List<int> connectionToBeRemoved = new List<int>(); //需要删除的连接

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值