unity---Mesh网格编程

Posted 格拉格拉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity---Mesh网格编程相关的知识,希望对你有一定的参考价值。

目录

1.Mesh 初识

2.Mesh介绍

 3Mesh 脚本


1.Mesh 初识

打开unity 新建3d物体 cube , wireframe模式下 即可发现正方形物体是由几个面组成的,

每个面都是由2个三角面组成,而每个三角面又是由3个点构成的。

而3d物体是由MeshFilter (模型)和MeshRenderer(渲染)组成的。官网介绍

 unity2021 示意图

2.Mesh介绍

unity 有自动渲染优化功能,mesh绘制时,如果顺时针绘制一个三角形,那么法向量是向上的。逆时针绘制三角形时,法向量是向下的。当法线朝向我们时这个面是可见的,否则要切换到反面才可见。

顶点:vertices

顶点下标:triangles

  

纹理:uv---注意左图uv顶点与 三角面绘制顶点的对应关系

 3Mesh 脚本

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

//脚本挂载到物体后,自动添加MeshFilter与MeshRenderer组件
[RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))]
public class Mesh_1 : MonoBehaviour

    private Mesh mesh;

    void Start()
    
        //新建Mesh
        mesh = new Mesh();

        MeshFilter filter = GetComponent<MeshFilter>();
        filter.mesh = _mesh;
        mesh.name = "Mesh1"; //命名
        mesh.vertices = GetVertexs();   //顶点
        mesh.triangles = GetTriangles(); //三角面顶点下标
        mesh.uv = GetU1V();     //纹理1
        mesh.uv2 = GetU2V();    //纹理2
        mesh.uv...= xxx;
        mesh.uv8 = xxx;
        mesh.normals = GetNormals(); //法向量-影响模型受光效果--按需使用
        //mesh.RecalculateNormals(); //若对法向量没有特别需求,可使用这条,自动计算
    

    private void Update()
    
        //获取切线与上面的法向量联合求出父切线
        _mesh.tangents = GetTangent();
    

    //切线--xyzw:0,1,0,-1改变y的正负值可调整normal map贴图的凹凸方向
    private Vector4[] GetTangent()
    
        return new Vector4[]
        
            0,
            1,
            0,
            -1,
        ;
    

    //顶点
    private Vector3[] GetVertexs()
    
        return new Vector3[]
        
            //3个顶点构成一个三角面
            new Vector3(0, 0, 0),
            new Vector3(1, 0, 0),
            new Vector3(1, 1, 0),
            //4个顶点构成一个正方形面
            new Vector3(0, 1, 0),
        ;
    

    //纹理贴图
    private Vector2[] GetU1V()
    
        return new Vector2[]
        
            new Vector2(1,0),
            new Vector2(0,0),
            new Vector2(0,1),
            new Vector2(1,1),
        ;
    

    private Vector2[] GetU2V()
    
        return new Vector2[]
        
            new Vector2(0,0),
            new Vector2(0,0),
            new Vector2(0,0),
            new Vector2(0,0),
        ;
    

    //法向量--影响受光效果
    private Vector3[] GetNormals()
    
        return new Vector3[]
        
            Vector3.right,
            Vector3.right,
            Vector3.right,
            Vector3.right,
        ;
    

    //顶点的绘制顺序---顶点下标序列
    private int[] GetTriangles()
    
        return new int[]
        
            0, 1, 2,
            0, 2, 3
        ;
    

以上是关于unity---Mesh网格编程的主要内容,如果未能解决你的问题,请参考以下文章

unity---Mesh网格编程

unity---Mesh网格编程

unity---Mesh网格编程

unity---Mesh网格编程

unity---Mesh网格编程

unity---Mesh网格编程