unity---Mesh网格编程
Posted 格拉格拉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了unity---Mesh网格编程相关的知识,希望对你有一定的参考价值。
目录
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网格编程的主要内容,如果未能解决你的问题,请参考以下文章