zoukankan      html  css  js  c++  java
  • Unity3D使用mesh创建一个正方形

    using UnityEngine;
    using System.Collections;
    
    public class Quad : MonoBehaviour 
    {
        // Use this for initialization
        void Start () {
            CreateQuad ();
        }
        
        private float m_width = 1;
        private float m_length = 1;
    
        public void CreateQuad()
        {
            /* 1. 顶点,三角形,法线,uv坐标, 绝对必要的部分只有顶点和三角形。 
                     如果模型中不需要场景中的光照,那么就不需要法线。如果模型不需要贴材质,那么就不需要UV */
            Vector3[] vertices = new Vector3[4];
            Vector3[] normals = new Vector3[4];
            Vector2[] uv = new Vector2[4];
    
            vertices [0] = new Vector3 (0, 0, 0);
            uv [0] = new Vector2 (0, 0);
            normals [0] = Vector3.up;
    
            vertices [1] = new Vector3 (0, 0, m_length);
            uv [1] = new Vector2 (0, 1);
            normals [1] = Vector3.up;
    
    
            vertices [2] = new Vector3 (m_width, 0, m_length);
            uv [2] = new Vector2 (1, 1);
            normals [2] = Vector3.up;
    
            vertices [3] = new Vector3 (m_width, 0, 0);
            uv [3] = new Vector2 (1, 0);
            normals [3] = Vector3.up;
    
            /*2. 三角形,顶点索引: 
             三角形是由3个整数确定的,各个整数就是角的顶点的index。 各个三角形的顶点的顺序通常由下往上数, 可以是顺时针也可以是逆时针,这通常取决于我们从哪个方向看三角形。 通常,当mesh渲染时,"逆时针" 的面会被挡掉。 我们希望保证顺时针的面与法线的主向一致 */
            int[] indices = new int[6];
            indices [0] = 0;
            indices [1] = 1;
            indices [2] = 2;
    
            indices [3] = 0;
            indices [4] = 2;
            indices [5] = 3;
    
            Mesh mesh = new Mesh ();
            mesh.vertices = vertices;
            mesh.normals = normals;
            mesh.uv = uv;
            mesh.triangles = indices;
            mesh.RecalculateBounds ();
    
            MeshFilter filter = this.gameObject.AddComponent<MeshFilter> ();
            if(filter != null)
            {
                filter.sharedMesh = mesh;
            }
    
            MeshRenderer meshRender = this.gameObject.AddComponent<MeshRenderer> ();
            Shader shader = Shader.Find ("Diffuse");
            meshRender.sharedMaterial = new Material (shader);
        }
    }
  • 相关阅读:
    [ 低危 ] mt网CRLF
    mysql之字段的修改,添加、删除,多表关系(外键),单表详细操作(增删改)
    mysql 之编码配置、引擎介绍、字段操作、数据类型及约束条件
    Navicat Premium永久激活方式
    centos 用户名密码忘记了怎么办?
    并发编程总结
    初识mysql
    线程queue、线程进程池,协程
    python解释器
    线程全局修改、死锁、递归锁、信号量、GIL以及多进程和多线程的比较
  • 原文地址:https://www.cnblogs.com/dongerlei/p/5515879.html
Copyright © 2011-2022 走看看