欧美日批视频_伊人影院焦久影院_午夜精品一区二区三区视频免费看_自拍偷拍视频在线观看_日本一线在线观看_毛片免费观看完整版

  • 您的位置:首頁 > 新聞動態 > Unity3D

    UNITY3D給立方體六個面貼不同的紋理圖

    2019/5/10??????點擊:


    using UnityEngine;
    using System.Collections;
     
    [RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
    public class Test3D : MonoBehaviour
    {
     
        public enum Direction
        {
            ClockWise,
            Anti_ClockWise
        }
     
        public Material mat;
     
        public Direction direction;
     
        // Use this for initialization
        void Start()
        {
            switch (direction)
            {
                case Direction.ClockWise:
                    DrawCubeWithUV_CloclWise();
                    break;
                case Direction.Anti_ClockWise:
                    DrawCubeWithUV_Anti_CloclWise();
                    break;
            }
        }
     
     
     
        void DrawCubeWithUV_CloclWise()
        {
            gameObject.GetComponent().material = mat;
     
            Mesh mesh = GetComponent().mesh;
            mesh.Clear();
     
            //設置頂點
            mesh.vertices = new Vector3[]
            {
                //front
                new Vector3(0, 0, 0),
                new Vector3(0, 0, 1),
                new Vector3(1, 0, 1),
                new Vector3(1, 0, 0),
     
                //top
                new Vector3(0, 0, 1),
                new Vector3(0, 1, 1),
                new Vector3(1, 1, 1),
                new Vector3(1, 0, 1),
     
                //back
                new Vector3(0, 1, 1),
                new Vector3(0, 1, 0),
                new Vector3(1, 1, 0),
                new Vector3(1, 1, 1),
     
                //bottom
                new Vector3(0, 1, 0),
                new Vector3(0, 0, 0),
                new Vector3(1, 0, 0),
                new Vector3(1, 1, 0),
     
                //left
                new Vector3(0, 1, 0),
                new Vector3(0, 1, 1),
                new Vector3(0, 0, 1),
                new Vector3(0, 0, 0),
     
                //right
                new Vector3(1, 0, 0),
                new Vector3(1, 0, 1),
                new Vector3(1, 1, 1),
                new Vector3(1, 1, 0),
            };
     
     
     
            //順時針看不到正面的,貼圖在里面
            mesh.triangles = new int[]
           {
                  0,1,2,
                  0,2,3,
                  4,5,6,
                  4,6,7,
                  8,9,10,
                  8,10,11,
                  12,13,14,
                  12,14,15,
                  16,17,18,
                  16,18,19,
                  20,21,22,
                  20,22,23
     
           };
     
            Vector2[] uvs = new Vector2[mesh.vertices.Length];
            for (int i = 0; i < uvs.Length; i += 4)
            {
                //正常貼圖
                uvs[i] = new Vector2(0, 0);
                uvs[i + 1] = new Vector2(0, 1);
                uvs[i + 2] = new Vector2(1, 1);
                uvs[i + 3] = new Vector2(1, 0);
     
                //轉換貼圖
                //uvs[i] = new Vector2(1, 0);
                //uvs[i + 1] = new Vector2(1, 1);
                //uvs[i + 2] = new Vector2(0, 1);
                //uvs[i + 3] = new Vector2(0, 0);
            }
            mesh.uv = uvs;
     
            //Vector3[] normals = new Vector3[mesh.vertices.Length];
            //for (int i = 0; i < normals.Length; i++)
            //{
            //    if (i < 4)
            //        normals[i] = Vector3.forward;
            //    if (i >= 4 && i < 8)
            //        normals[i] = Vector3.up;
            //    if (i >= 8 && i < 12)
            //        normals[i] = Vector3.back;
            //    if (i >= 12 && i < 16)
            //        normals[i] = Vector3.down;
            //    if (i >= 16 && i < 20)
            //        normals[i] = Vector3.left;
            //    if (i >= 20 && i < 24)
            //        normals[i] = Vector3.right;
            //}
            //mesh.normals = normals;
        }
     
        void DrawCubeWithUV_Anti_CloclWise()
        {
            gameObject.GetComponent().material = mat;
     
            Mesh mesh = GetComponent().mesh;
            mesh.Clear();
     
            //設置頂點
            mesh.vertices = new Vector3[]
            {
                //front
                new Vector3(0, 0, 0),
                new Vector3(0, 0, 1),
                new Vector3(1, 0, 1),
                new Vector3(1, 0, 0),
     
                //top
                new Vector3(0, 0, 1),
                new Vector3(0, 1, 1),
                new Vector3(1, 1, 1),
                new Vector3(1, 0, 1),
     
                //back
                new Vector3(0, 1, 1),
                new Vector3(0, 1, 0),
                new Vector3(1, 1, 0),
                new Vector3(1, 1, 1),
     
                //bottom
                new Vector3(0, 1, 0),
                new Vector3(0, 0, 0),
                new Vector3(1, 0, 0),
                new Vector3(1, 1, 0),
     
                //left
                new Vector3(0, 1, 0),
                new Vector3(0, 1, 1),
                new Vector3(0, 0, 1),
                new Vector3(0, 0, 0),
     
                //right
                new Vector3(1, 0, 0),
                new Vector3(1, 0, 1),
                new Vector3(1, 1, 1),
                new Vector3(1, 1, 0),
            };
     
            //逆時針看到的很好,但是貼圖反了
            mesh.triangles = new int[]
           {
                  0,2,1,
                  0,3,2,
                  4,6,5,
                  4,7,6,
                  8,10,9,
                  8,11,10,
                  12,14,13,
                  12,15,14,
                  16,18,17,
                  16,19,18,
                  20,22,21,
                  20,23,22
           };
    #if false
            //六個面貼同一張圖片
            Vector2[] uvs = new Vector2[mesh.vertices.Length];
            for (int i = 0; i < uvs.Length; i += 4)
            {
                //uvs[i] = new Vector2(0, 0);
                //uvs[i + 1] = new Vector2(0, 1);
                //uvs[i + 2] = new Vector2(1, 1);
                //uvs[i + 3] = new Vector2(1, 0);
                uvs[i] = new Vector2(1, 0);
                uvs[i + 1] = new Vector2(1, 1);
                uvs[i + 2] = new Vector2(0, 1);
                uvs[i + 3] = new Vector2(0, 0);
            }
            mesh.uv = uvs;
    #else
            //六個面貼不同的圖片
            Vector2[] uvs = sixTexForCube(mesh.vertices);
            mesh.uv = uvs;
    #endif
            //法線
            //Vector3[] normals = new Vector3[mesh.vertices.Length];
            //for (int i = 0; i < normals.Length; i++)
            //{
            //    if (i < 4)
            //        normals[i] = Vector3.forward;
            //    if (i >= 4 && i < 8)
            //        normals[i] = Vector3.up;
            //    if (i >= 8 && i < 12)
            //        normals[i] = Vector3.back;
            //    if (i >= 12 && i < 16)
            //        normals[i] = Vector3.down;
            //    if (i >= 16 && i < 20)
            //        normals[i] = Vector3.left;
            //    if (i >= 20 && i < 24)
            //        normals[i] = Vector3.right;
            //}
            //mesh.normals = normals;
        }
     
        Vector2[] sixTexForCube(Vector3[] verticles)
        {
            Vector2[] uv = new Vector2[verticles.Length];
     
            float t = 1 / 3f;
     
            //front
            uv[0] = new Vector2(t, 0);
            uv[1] = new Vector2(t, t);
            uv[2] = new Vector2(0, t);
            uv[3] = new Vector2(0, 0);
     
            //top
            uv[4] = new Vector2(2 * t, 0);
            uv[5] = new Vector2(2 * t, t);
            uv[6] = new Vector2(t, t);
            uv[7] = new Vector2(t, 0);
     
            //back
            uv[8] = new Vector2(1, 0);
            uv[9] = new Vector2(1, t);
            uv[10] = new Vector2(2 * t, t);
            uv[11] = new Vector2(2 * t, 0);
     
            //Bottom
            uv[12] = new Vector2(t, t);
            uv[13] = new Vector2(t, 2 * t);
            uv[14] = new Vector2(0, 2 * t);
            uv[15] = new Vector2(0, t);
     
            //left
            uv[16] = new Vector2(2 * t, t);
            uv[17] = new Vector2(2 * t, 2 * t);
            uv[18] = new Vector2(t, 2 * t);
            uv[19] = new Vector2(t, t);
     
            //right
            uv[20] = new Vector2(1, t);
            uv[21] = new Vector2(1, 2 * t);
            uv[22] = new Vector2(2 * t, 2 * t);
            uv[23] = new Vector2(2 * t, t);
     
            return uv;
        }
    }


    主站蜘蛛池模板: 妇欲欢公爽公妇精品 | 丁香婷婷色综合亚洲电影 | 亚洲成色www久久网站瘦与人 | 精品一卡2卡三卡4卡乱码仙踪林 | 亚洲一区二区三区精品动漫 | 在线视频国产情侣不卡顿 | 亚洲草视频 | 精品国产免费人成在线观看 | 亚洲国产精品久久久久久无码 | 国产精品成人99久久久久 | 久久国模| 成人精品小舞 | 回复术士第2季在线观看免费 | 91部免费视频 | 国产黄A三级三级三级 | 逆行人生免费观看 | 精品国产福利在线 | 成人亚洲在线 | 午夜色大片在线观看 | 最新亚洲人成无码WWW | 国产麻豆精品传媒AV国产婷婷 | 亚洲成人一级毛片 | 欧美黄色大片免费观看 | 亚洲Av之男人的天堂 | 欧美xxxxxxxxx59| 青青草av网站 | 黑丝一级片 | 大地资源在线观看免费高清二期 | 91日韩视频在线观看 | 成人AV毛片无码免费网站 | 动漫人物交性h的视频 | 网友自拍超碰 | 国产网址视频 | 老司机精品 | 亚洲喷水视频 | 久久久四虎 | 女邻居丰满的奶水 | 99久无码中文字幕一本久道 | 天天爽夜夜爽精品视频婷婷 | 国产免费av大片在线观看 | 亚洲国产日韩a综合在线 |