最新国产在线视频_一色一伦一区二区三区的区别_欧美成人影院亚洲综合图_国产亚洲一区精品_大胆欧美熟妇xxbbwwbw高潮了_久久午夜无码鲁丝片

  • 您的位置:首頁 > 新聞動態 > 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;
        }
    }


    主站蜘蛛池模板: 国产人妻精品无码AV在线 | 国产成人久久一区二区三区 | 137肉体写真日本裸交 | 精品国产a∨无码一区二区三区 | 尤物AV无码色AV无码麻豆 | 精品偷拍被偷拍在线观看 | 好男人社区影院WWW 热久久久久香蕉无品码 | 伊人狠狠色丁香婷婷综合动态图 | 99视频精品全部免费 在线 | 亚洲aⅴ天堂av天堂无码 | 爱99久久 | 国产精品成人观看视频 | 欧美日韩国产不卡在线看 | 国产一二三在线观看 | 国内精品久久久久久不卡影院 | 精品亚洲在线 | 少妇看A片偷人精品视频 | 亚洲日韩爆乳中文字幕欧美 | 国内精品久久久久久无码不卡 | 国产V亚洲V天堂无码久久久 | 中文人妻熟妇乱又伦精品 | 亚洲天堂网中文字 | 亚洲自拍偷拍网站 | 最近高清日本免费 | 国产一级特aa特黄蜜臀视频 | 国产黄a三级三级三 | 欧美成妇人吹潮在线播放 | 斗罗大陆4终极斗罗免费观看 | 性一交一乱一透一a级 | 黄色的网站免费在线观看 | 亚洲av爆乳精品一区二区中文 | 少妇精品久久久久www蜜月 | 国产乱子伦在线观看 | 亚洲最大无码中文字幕 | 欧美一区二区三区精品 | 又黄又爽又猛1000部A片 | 女攻男受极限调教高h | 国产亚洲精品女人久久久久久 | 有码一区二区三区 | 欧美日韩综合一区二区三区 | 激情亚洲另类图片区小说区 |