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);
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM