目录

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的理解相关推荐

  1. Unity Mesh 初体验

    什么是Mesh Mesh是Unity中的一个组件,称为网格组件.通俗的讲,Mesh是指模型的网格,3D模型是由多边形拼接而成,而一个复杂的多边形,实际上是由多个三角面拼接而成.所以一个3D模型的表面是 ...

  2. Unity Mesh(七) Mesh给球贴图

    之前在 Unity Mesh(三) Mesh画球 中已经说明了如何画球,现在我们在这个球的基础上贴图. 这里我们有个极坐标和直角坐标的转换,具体我也不是很明白,反正就是拿来用吧,据某位大神讲解,极坐标 ...

  3. Unity Mesh基础系列(一)生成网格(程序生成)

    目录 1 渲染事物 2 创建顶点网格 3 创建Mesh 4 生成附加顶点数据 本文主要内容: 1.创建一个点阵网格 2.用协程分析点阵网格的位置 3.用三角形定义表面 4.自动生成法线 5.增加纹理坐 ...

  4. Unity Mesh基础知识

    Unity Mesh基础知识 什么是Mesh Mesh的组成部分 利用Mesh创建一个Cube 创建Cube 顶点坐标 渲染 转载链接 什么是Mesh     Mesh是指的模型的网格,3D模型是由多 ...

  5. 【Unity】如何理解Vector3.normalized 归一化向量 以及 向量方向计算

    [Unity]如何理解Vector3.normalized 归一化向量 以及 向量方向计算 normalized的概念 Vector3.normalized : 返回大小为1的向量(只读).规范化时, ...

  6. Unity Mesh、MeshFilter、MeshRenderer到底是个啥玩意

    1.首先我们创建一个Cube在Unity中,在Hierarchy中点击右键3d Object ->Cube.然后查看右侧的Inspector窗口,如果没有的话,看顶部的Windows菜单,里面有 ...

  7. Unity Mesh基础系列(三)立方体球(更好更圆)

    目录 1 适配圆角立方体 2 检查映射 3 用数学来玩 4 调整映射 本章重点: 1.把立方体变为球体 2.在Unity中可视化映射 3.分析换算的损耗 4.用数学优化算法 在本教程中,我们将创建一个 ...

  8. Unity Mesh(一) 初步使用Mesh画平面图形

    最近发现Mesh很牛的样子,虽然以前也见过人家大牛用这个写过工具,当时没大在意,现在开始接触,觉得挺好玩的,首先先上我画的几个图: 据说还可以画各种形状,原理就是所有图形都是由三角形组成的. 下面我们 ...

  9. Unity Mesh(五) Mesh 立方体Cube贴图以及六个面分别贴不同的图片

    在前面的篇章中已经有了怎么Mesh画一个立方体,当时的立方体是按照逆时针的画的,其它大都都是按照顺时针画的,当时一开始画立方体顺时针没画出来,有些面看不到就调换了下顺序,没特别注意方向问题,然而这一篇 ...

最新文章

  1. 使用 ftrace 调试 Linux 内核【转】
  2. RHEL5系统 sendmail+qpopper 架设简易邮件服务器
  3. apache 服务器安全配置
  4. viewPager开启界面导航之旅
  5. ASP中利用OWC控件实现图表功能详解[zz]
  6. python中的函数、生成器的工作原理
  7. 旅行者 问题_门槛项目:没有旅行者回到他的原籍城市。
  8. access对比数据_数据仓库系列之数据质量管理
  9. 简单易懂设计模式——简单工厂模式
  10. 烂泥:nagios学习(四):pnp4nagios图形化绘制nagios数据
  11. “后T+0”时代:基金电商人以变应变
  12. js案例一 :方块拖动效果
  13. 大众点评爬取------分析成都必吃菜
  14. 《C程序设计》读后感
  15. php 实现繁体转简体代码效率对比
  16. 获取电影天堂电视剧下载页面所有url地址
  17. dcp9020cdn可以打印a3纸吗_印品质量 细节对比_兄弟 9020CDN_办公打印评测试用-中关村在线...
  18. grasemonkey ajax页面,Greasemonkey 中使用 GM_xmlhttpRequest 如何在 https 页面中加载 http 资源?...
  19. C++三元一次方程组算法
  20. 迪文触摸串口屏 实例应用(4)——同步数据返回(单次按压、持续按压、松开按压)

热门文章

  1. 了解DBHelper类
  2. 一个 HTTP 打趴80%面试者
  3. spring官方文档中文
  4. 02.14 Lizards and Basements 2
  5. 航空航天工程师必看 | 通用1553B总线测试系统搭建宝典
  6. linux下恢复win10启动,重装win10后原来的ubuntu系统启动项丢失恢复方式
  7. 杰理AC690X系列---TF卡的DATE和CLK引脚复用AD采集(6)
  8. JavaScript-老杜
  9. 光通信芯片市场分析报告[整理]
  10. python基础-生成器表达式