Unity中的Mesh很好理解,就是一个网格的数据结构,里面记录了顶点、顶点索引等信息:

Mesh mesh = new Mesh();
mesh.vertices = ...
mesh.triangles = ...
mesh.uv = ...//都可以对其赋值

什么是subMesh
Mesh里面有这么一个参数mesh.subMeshCount,所以说明了subMesh是 属于 Mesh的,subMesh是mesh的子mesh,subMesh所有的顶点数据信息都来自于对应的Mesh,subMesh自身独有的内容,实际上是记录了一串索引的数组,从subMesh取得的索引信息,加上原Mesh具有的顶点信息,我们就可以绘制出原来整个Mesh的一部分,那么subMesh有什么用呢?举个例子,对于一个贴了多种材质(Material)的模型object,往往不同的材质会对应模型不同的部位,当我们将模型导出的时候,如果每一个材质,我们都导出一个完整的模型的mesh,这样无疑是很浪费内存的,所以说,为了进行区分,每一个材质对应的顶点部分对应的mesh,就组成了一个subMesh,即一种材质对应一个subMesh,如果一个模型只有一个材质,那么导出的subMesh自然就只有一个。

可以看看Unity Document的解释:

Each sub-mesh corresponds to a Material in a Renderer, such as MeshRenderer or SkinnedMeshRenderer. A sub-mesh consists of a list of triangles, which refer to a set of vertices. Vertices can be shared between multiple sub-meshes.

Each sub-mesh corresponds to a Material in a Renderer, such as MeshRenderer or SkinnedMeshRenderer. A sub-mesh consists of a list of triangles, which refer to a set of vertices. Vertices can be shared between multiple sub-meshes.

如何创建和读取subMesh
可以利用Mesh.SetTrianglesMesh.GetTriangles等函数来进行读取和存储subMesh的数据,如下图所示。

大致是这么个使用方法,需要设置mesh.subMeshCount:

lineMesh.subMeshCount = 2;
lineMesh.vertices = lineVertices.ToArray();
lineMesh.SetNormals(normals);//绘制0号submesh
lineMesh.SetIndices(lineIndices[0].ToArray(), MeshTopology.Lines, 0);
Gizmos.DrawMesh(lineMesh, 0, gameObject.transform.position);//绘制1号submesh
lineMesh.SetIndices(lineIndices[1].ToArray(), MeshTopology.Lines, 1);
Gizmos.DrawMesh(lineMesh, 1, gameObject.transform.position);

Unity中Mesh和subMesh的区别相关推荐

  1. Matlab中mesh和surf的区别

    Matlab中mesh和surf的区别 Matlab中surf()和mesh()的区别: [X,Y] = meshgrid(-2:.2:2, -4:.4:4); Z = X .* exp(-X.^2 ...

  2. 关于Unity中Mesh网格的详解

    3D模型 通过3D建模软件所建出来的点和面,如以三角形为主的点和面,比如人的脑袋一个球,就是由各种各样的三角形组成的点和面. 点和面以及纹理坐标都是通过3D建模软件建模出来的. Unity会帮我们把模 ...

  3. unity中NGUI与UGUI的区别?

    什么是UI? UI即User Interface(用户界面)的简称.泛指用户的操作界面,UI设计主要指界面的样式,美观程度.而使用上,对软件的人机交互.操作逻辑.界面美观的整体设计则是同样重要的另一个 ...

  4. unity中Mesh网格编程

    上图是效果 一.关于mesh的意义 有了mesh网格,物体才能被渲染出来. (1)mesh中包含顶点, mesh.vertices (2)顶点对应的uv(一张图的uv左下角00,右上角11) mesh ...

  5. unity中Animation与Animator的区别

    Animation:单一动画,一般使用在单一动画播放.占用资源小. Animator:多个动画,可用控制器切换多个动画播放.占用资源大. 转载于:https://www.cnblogs.com/Pro ...

  6. Unity中Awake和Start的区别

    教程地址(观看视频需翻墙): https://unity3d.com/cn/learn/tutorials/topics/scripting/awake-and-start?playlist=1711 ...

  7. Unity中协程和线程区别

    协程和线程的效果类似,都可以实现与主线程异步的效果,但是本质不一样. 协程在主线程内,通过软件手段实现函数与主线程的异步效果.Startcoroutine(IEnumerator Func);IEnu ...

  8. Unity中如何给你的场景模型mesh减面——【一】

    一.前言 甲方给你一大场景,光fbx文件就4个G,导入Unity后,发现全部卡帧,变成动画片,发布成webGL足足有500多M.要使帧率至少达到60以上吧,发布成webGL不能超过500M,如何拯救呢 ...

  9. Unity中Skinned Mesh Renderer Blend Shapes小试

    第一个应用:如何使用网格渲染器Blend Shapes Unity制作木棍剥皮 1. Intro 2.Modeling (Blender) 打开Blender 软件 调整视角 然后快捷键: Shift ...

最新文章

  1. 安装SaltStack
  2. 数据包分析中Drop和iDrop的区别
  3. FCN-TensorFlow完整代码Github
  4. system文件_解压MIUI 10 升级包 system.new.dat.br
  5. 六十八、SpringBoot连接MongoDB操作
  6. 简单了解各种序列化技术-Avro序列化
  7. ImportError: cannot import name ‘AliPay‘ from ‘alipay‘
  8. 正则表达式_月隐学python第20课
  9. libjpeg-turbo(1)
  10. GitHub 撤销 commit
  11. Java 又双叒叕发布新版本,这么多版本如何灵活管理?
  12. 怎么查看自己宽带是公网ip还是内网ip?
  13. ONF代理执行董事Rick Bauer出走MEF
  14. python中的内置函数总结
  15. 安卓手机按键精灵Python封装
  16. 在线考试答题刷题小程序
  17. md文件打开错误(Failed to load file)
  18. yolov3 批量处理图片获得检测框坐标
  19. 再论硬件产品经理的岗位要求
  20. crash: mod命令

热门文章

  1. java开发平台(Java开发平台idea)
  2. intrinsics information是什么
  3. 【涨薪规律,四个词:英语、外企、进修、跳槽。】---留作参考
  4. 暨南大学计算机考研848操作系统不会学不会系列二【进程管理】【22专业课第一】
  5. 2018京东项目经理实习生面试经验
  6. 最易懂Spring循环依赖
  7. 李正茂 :元宇宙与云网融合
  8. Spark 论文篇-论文中英语单词集
  9. openssl:undefined reference to symbol 'EVP_EncryptUpdate@@libcrypto.so.10'
  10. python实现“粒子动画”