对Unity Mesh的理解
目录
Mesh的组成
Mesh的属性
示例
Mesh的组成
Mesh是Unity内的一个组件,称为网格组件,是Unity 的主要图形基元。Unity 中提供了各种组件来渲染常规或蒙皮网格、轨迹或 3D 线条。
- Mesh 网格
- MeshFilter 网格过滤器
- Mesh Renderer 网格渲染器
- Skinned Mesh Renderer 带蒙皮的网格渲染器
Mesh:是指模型的网格,建模就是建网格。细看Mesh,可以知道Mesh的主要属性内容包括顶点坐标,法线,纹理坐标,三角形绘制序列等其他有用属性和功能。因此建网格,就是画三角形;画三角形就是定位三个点。
Mesh Filter:内包含一个Mesh组件,可以根据MeshFilter获得模型网格的组件,也可以为MeshFilter设置Mesh内容。
Mesh Render:是用于把网格渲染出来的组件。MeshFilter的作用就是把Mesh扔给MeshRender将模型或者说是几何体绘制显示出来。
Skinned Mesh Render:用来渲染骨骼动画;此类动画中的网格形状由动画骨骼进行变形。
它们之间的关系大概就是Unity中的对象就是GameObject,每个GameObject都可以有一个MeshFilter组件(也可以没有),该组件又有Mesh属性(这个一定有),而该属性又有顶点坐标,法线等属性。而如果GameObject里有MeshFilter,则必须要Mesh Renderer才能将此网格渲染出来,不然是看不见该网格的。
Mesh的属性
Mesh的属性:
- 顶点坐标(vertex)
- 法线(normal)
- 纹理坐标(uv)
- 三角形序列(triangle)
顶点坐标:顶点坐标数组存放Mesh的每个顶点的空间坐标,假设某mesh有n个顶点,则vertex的size为n
法线:法线数组存放mesh每个顶点的法线,大小与顶点坐标对应,normal[i]对应顶点vertex[i]的法线
纹理坐标:它定义了图片上每个点的位置的信息. 这些点与3D模型是相互联系的, 以决定表面纹理贴图的位置. UV就是将图像上每一个点精确对应到模型物体的表面. uv[i]对应vertex[i]
三角形序列:每个mesh都由若干个三角形组成,而三角形的三个点就是顶点坐标里的点,三角形的数组的size = 三角形个数 * 3.
例如:某mesh有四个顶点0,1,2,3,
V0(1, 1, 0),
V1(-1, 1, 0),
V2(1, -1, 0),
V3(-1, -1, 0)
那么它们可以组成这样的一个网格:
tri[0] = ver[0], ver[3], ver[1],
tri[1] = ver[0], ver[2], ver[3],
注意:三角形的顶点顺序必须是顺时针,顺时针表示正面,逆时针表示背面,而unity3d在渲染时默认只渲染正面,背面是看不见的。
那么该三角形可以表示为:
tri = new int[2 * 3]{0, 3, 1, 0, 2, 3};
如何要获取第N个三角形对应的三个顶点坐标,则:
v1 = tri[N*3 + 0],
v2 = tri[N*3 + 1],
v3 = tir[N*3 + 2]
示例
1.创建一个GameObject并添加MeshFilter以及MeshRender组件,并创建一个“CreateMesh.cs”脚本给它。
2.获取该对象的filter组件,并创建一个mesh给它。
3.为该mesh设置属性,这里先设置顶点,然后将三角形与顶点绑定。
using UnityEngine;
using System.Collections;public class CreateMesh : MonoBehaviour {private MeshFilter filter;private Mesh mesh;// Use this for initializationvoid Start () {// 获取GameObject的Filter组件filter = GetComponent<MeshFilter>();// 并新建一个mesh给它mesh = new Mesh();filter.mesh = mesh;// 初始化网格InitMesh();}// Update is called once per framevoid Update () {}/// <summary>/// Inits the mesh./// </summary>void InitMesh(){mesh.name = "MyMesh";// 为网格创建顶点数组Vector3[] vertices = new Vector3[4]{new Vector3(1, 1, 0),new Vector3(-1, 1, 0),new Vector3(1, -1, 0),new Vector3(-1, -1, 0)};mesh.vertices = vertices;// 通过顶点为网格创建三角形int[] triangles = new int[2 * 3]{0, 3, 1, 0, 2, 3};mesh.triangles = triangles;}
}
效果如图:
3.网格已经成功生成,接下来该给网格贴图了,在Inspector视图里选中Mesh Render,并拖一个材质给它,
Mesh Render是负责渲染的,将Mesh Filter里的mesh通过自身的Materials渲染出来。
设置完材质后,我们需要将纹理贴图与网格顶点一一对应起来,这样才能渲染出来。
// 为mesh设置纹理贴图坐标Vector2[] uv = new Vector2[4]{new Vector2(1, 1),new Vector2(0, 1),new Vector2(1, 0),new Vector2(0, 0)};mesh.uv = uv;
效果如图:
本文参考:
https://www.cnblogs.com/jeason1997/p/4825981.html
https://www.jianshu.com/p/a43408eda7a1
https://docs.unity.cn/cn/current/Manual/class-Mesh.html
对Unity Mesh的理解相关推荐
- Unity Mesh 初体验
什么是Mesh Mesh是Unity中的一个组件,称为网格组件.通俗的讲,Mesh是指模型的网格,3D模型是由多边形拼接而成,而一个复杂的多边形,实际上是由多个三角面拼接而成.所以一个3D模型的表面是 ...
- Unity Mesh(七) Mesh给球贴图
之前在 Unity Mesh(三) Mesh画球 中已经说明了如何画球,现在我们在这个球的基础上贴图. 这里我们有个极坐标和直角坐标的转换,具体我也不是很明白,反正就是拿来用吧,据某位大神讲解,极坐标 ...
- Unity Mesh基础系列(一)生成网格(程序生成)
目录 1 渲染事物 2 创建顶点网格 3 创建Mesh 4 生成附加顶点数据 本文主要内容: 1.创建一个点阵网格 2.用协程分析点阵网格的位置 3.用三角形定义表面 4.自动生成法线 5.增加纹理坐 ...
- Unity Mesh基础知识
Unity Mesh基础知识 什么是Mesh Mesh的组成部分 利用Mesh创建一个Cube 创建Cube 顶点坐标 渲染 转载链接 什么是Mesh Mesh是指的模型的网格,3D模型是由多 ...
- 【Unity】如何理解Vector3.normalized 归一化向量 以及 向量方向计算
[Unity]如何理解Vector3.normalized 归一化向量 以及 向量方向计算 normalized的概念 Vector3.normalized : 返回大小为1的向量(只读).规范化时, ...
- Unity Mesh、MeshFilter、MeshRenderer到底是个啥玩意
1.首先我们创建一个Cube在Unity中,在Hierarchy中点击右键3d Object ->Cube.然后查看右侧的Inspector窗口,如果没有的话,看顶部的Windows菜单,里面有 ...
- Unity Mesh基础系列(三)立方体球(更好更圆)
目录 1 适配圆角立方体 2 检查映射 3 用数学来玩 4 调整映射 本章重点: 1.把立方体变为球体 2.在Unity中可视化映射 3.分析换算的损耗 4.用数学优化算法 在本教程中,我们将创建一个 ...
- Unity Mesh(一) 初步使用Mesh画平面图形
最近发现Mesh很牛的样子,虽然以前也见过人家大牛用这个写过工具,当时没大在意,现在开始接触,觉得挺好玩的,首先先上我画的几个图: 据说还可以画各种形状,原理就是所有图形都是由三角形组成的. 下面我们 ...
- Unity Mesh(五) Mesh 立方体Cube贴图以及六个面分别贴不同的图片
在前面的篇章中已经有了怎么Mesh画一个立方体,当时的立方体是按照逆时针的画的,其它大都都是按照顺时针画的,当时一开始画立方体顺时针没画出来,有些面看不到就调换了下顺序,没特别注意方向问题,然而这一篇 ...
最新文章
- 使用 ftrace 调试 Linux 内核【转】
- RHEL5系统 sendmail+qpopper 架设简易邮件服务器
- apache 服务器安全配置
- viewPager开启界面导航之旅
- ASP中利用OWC控件实现图表功能详解[zz]
- python中的函数、生成器的工作原理
- 旅行者 问题_门槛项目:没有旅行者回到他的原籍城市。
- access对比数据_数据仓库系列之数据质量管理
- 简单易懂设计模式——简单工厂模式
- 烂泥:nagios学习(四):pnp4nagios图形化绘制nagios数据
- “后T+0”时代:基金电商人以变应变
- js案例一 :方块拖动效果
- 大众点评爬取------分析成都必吃菜
- 《C程序设计》读后感
- php 实现繁体转简体代码效率对比
- 获取电影天堂电视剧下载页面所有url地址
- dcp9020cdn可以打印a3纸吗_印品质量 细节对比_兄弟 9020CDN_办公打印评测试用-中关村在线...
- grasemonkey ajax页面,Greasemonkey 中使用 GM_xmlhttpRequest 如何在 https 页面中加载 http 资源?...
- C++三元一次方程组算法
- 迪文触摸串口屏 实例应用(4)——同步数据返回(单次按压、持续按压、松开按压)