mesh网格绘制

顶点

mesh类型

 空网格

绘制三角形--3个点绘制一次(顺时针单面)

 void Start()
    {  Mesh m_Mesh=new Mesh();     

        List<Vector3>verties=new List<Vector3>();   
        verties.Add(Vector3.zero);//0
        verties.Add(Vector3.up);//1
        verties.Add(Vector3.right);//2

        m_Mesh.vertices=verties.ToArray();


        //mesh网格绘制顺序
        m_Mesh.triangles = new int[] { 0, 1, 2 ,2,1,0};

        GetComponent<MeshFilter>().mesh = m_Mesh;
}

 双面

 void Start()
    {  Mesh m_Mesh=new Mesh();     

        List<Vector3>verties=new List<Vector3>();   
        verties.Add(Vector3.zero);//0
        verties.Add(Vector3.up);//1
        verties.Add(Vector3.right);//2

        m_Mesh.vertices=verties.ToArray();


        //mesh网格绘制顺序
        m_Mesh.triangles = new int[] { 0, 1, 2 };

        GetComponent<MeshFilter>().mesh = m_Mesh;
}

绘制cube--8顶点

 void Start()
    {  Mesh m_Mesh=new Mesh();     

        List<Vector3>verties=new List<Vector3>();
        //verties.Add(Vector3.zero);//0
        //verties.Add(Vector3.up);//1
        //verties.Add(Vector3.right);//2
        verties.Add(new Vector3(0, 1, 0));//顶点8个
        verties.Add(new Vector3(0, 1, 1));
        verties.Add(new Vector3(1, 1, 1));
        verties.Add(new Vector3(1, 1, 0));
        verties.Add(new Vector3(0, 0, 0));
        verties.Add(new Vector3(0, 0, 1));
        verties.Add(new Vector3(1, 0, 1));
        verties.Add(new Vector3(1, 0, 0));
        m_Mesh.vertices=verties.ToArray();


        //mesh网格绘制顺序
        m_Mesh.triangles = new int[]
        {
            4,0,3,
            3,7,4,
            7,3,2,
            7,2,6,
            //背面逆时针
            6,2,1,
            6,1,5,
            5,1,0,
            5,0,4,
            0,1,2,
            0,2,3,
            5,4,7,
            7,6,5
        };

        GetComponent<MeshFilter>().mesh = m_Mesh;
}

 绘制的形状没有棱角,法线

 

 

 法线凹凸--光的反射

  ----解决没有光反

 ----添加uv贴图

顶点数相同

uv坐标,比例裁剪

   //给mesh添加uv坐标
        List<Vector2> uv = new List<Vector2>();
        //uv.Add(new Vector2(0, 0));//换比例
        uv.Add(new Vector2(0.1f, 0.3f ));
        uv.Add(new Vector2(0.9f, 0.3f));
        uv.Add(new Vector2(0.1f, 0.9f));
        uv.Add(new Vector2(0, 1));
        uv.Add(new Vector2(0, 0));
        uv.Add(new Vector2(1, 0));
        uv.Add(new Vector2(1, 1));
        uv.Add(new Vector2(0, 1));
        m_Mesh.uv = uv.ToArray();

 简化网格

 

 

---盒子+球

  void Start()
    {  Mesh m_Mesh=new Mesh();     

        List<Vector3>verties=new List<Vector3>();
        //verties.Add(Vector3.zero);//0
        //verties.Add(Vector3.up);//1
        //verties.Add(Vector3.right);//2
        verties.Add(new Vector3(0, 5, 0));//顶点8个
        verties.Add(new Vector3(0, 5, 5));//大小*5
        verties.Add(new Vector3(5, 5, 5));
        verties.Add(new Vector3(5, 5, 0));
        verties.Add(new Vector3(0, 0, 0));
        verties.Add(new Vector3(0, 0, 5));
        verties.Add(new Vector3(5, 0, 5));
        verties.Add(new Vector3(5, 0, 0));
        m_Mesh.vertices=verties.ToArray();


        //mesh网格绘制顺序
        m_Mesh.triangles = new int[]
        {
            4,3,0,--2,3顺序换
            3,4,7,
            7,2,3,
            7,6,2,
            //背面逆时针
            6,1,2,
            6,5,1,
            5,0,1,
            5,4,0,
            0,2,1,
            0,3,2,
            5,7,4,
            7,5,6
        };
        //自动添加法线
        m_Mesh.RecalculateNormals(); //简单添加 
        //给mesh添加uv坐标
        List<Vector2> uv = new List<Vector2>();
        //uv.Add(new Vector2(0, 0));//换比例
        uv.Add(new Vector2(0.1f, 0.3f ));
        uv.Add(new Vector2(0.9f, 0.3f));
        uv.Add(new Vector2(0.1f, 0.9f));
        uv.Add(new Vector2(0, 1));
        uv.Add(new Vector2(0, 0));
        uv.Add(new Vector2(1, 0));
        uv.Add(new Vector2(1, 1));
        uv.Add(new Vector2(0, 1));
        m_Mesh.uv = uv.ToArray();
        GetComponent<MeshFilter>().mesh = m_Mesh;
        GetComponent<MeshCollider>().sharedMesh = m_Mesh;
}

 网格碰撞器

 球形


    public Mesh sphere;
    // Start is called before the first frame update
    void Start()
    {
        Mesh mesh = new Mesh();
        List<Vector3> vertices = new List<Vector3>();
        List<Vector3> normals = new List<Vector3>();
        List<Vector2> uv = new List<Vector2>();
        for (int i = 0; i < sphere.vertices.Length; i++)
        {
            vertices.Add(sphere.vertices[i]);
            normals.Add(sphere.normals[i]);
            uv.Add(sphere.uv[i]);
        }
        mesh.vertices = vertices.ToArray();
        mesh.normals = normals.ToArray();
        mesh.uv = uv.ToArray();


        List<int> triangles = new List<int>();
        for (int i = 0; i < sphere.triangles.Length; i += 3)
        {
            triangles.Add(sphere.triangles[i]);
            triangles.Add(sphere.triangles[i + 2]);
            triangles.Add(sphere.triangles[i + 1]);
        }
        mesh.triangles = triangles.ToArray();

        GetComponent<MeshFilter>().mesh = mesh;
        GetComponent<MeshCollider>().sharedMesh = mesh;


    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值