网格(Mesh)基础
1.Mesh概念与组成
Unity中想要显示一个3D模型,必须要知道该模型的形状,这个形状其实就是mesh数据。有了mesh数据后,再通过Mesh Filter组件将mesh数据发送给Mesh Renderer组件进行渲染。Mesh Filter组件不一定每个gameObject对象都有,但是Mesh Rnderer组件是一定有的。我们也可以自定义mesh的数据,然后挂上一个Mesh Renderer组件从而渲染出我们想要的效果。
Mesh概念:Mesh是模型的网格,通过点构成线,再由线构成三角形,最后由三角形构成面,然后通过材质来进行网格表面的表达,如阴影,贴图等。Unity除了ui的mesh,其他都需要MeshFilter来确定网格形状,通过Material以及MeshRenderer来进行网格渲染。
Mesh组成:
1.顶点坐标(vertex):顶点是网格最基础的组成部分,可通过mesh.vertices获取和赋值。
mesh.vertices是一个Vector3的数组,每个Vector3为此顶点与此游戏物体的相对坐标(local position)。
顶点的位置,数量没有任何限制。几个同样的顶点可以组合成若干不同形状,不同数量的三角形。
2.法线(normal):法线就是垂直于面的一条线,它有方向,没有大小。可通过mesh.normals获取和赋值。法线数组存放mesh每个顶点的法线,大小与顶点坐标对应,normal[i]对应顶点vertex[i]的法线。法线向外的面就是正面,相反的就是背面,一般来讲,从正面看才能看到面,背面看面是看不到的。可以通过mesh.RecalculateNormals()来计算。
3.纹理坐标(uv):Unity中想要显示一个3D模式,必须要知道该模式的形状,这个形状其实就是mesh数据。有了mesh数据后,再通过Mesh Filter组件将mesh数据发送给Mesh Renderer组件进行渲染。Mesh Filter组件不一定每个gameObject对象都有,但是Mesh Rnderer组件是一定有的。那么我们就可以自定义mesh的数据,然后挂上一个Mesh Renderer组件从而渲染出我们想要的效果。
uv值用处很多,例如材质texture的采样,或是利用它的一些特性(范围0-1;同一个uv区域每个像素的uv值皆不同)进行GPU内的一些计算。mesh.uv作为一个Vector2数组与mesh.vertices的长度必须一致,每个uv的顺序与vertices的顺序也是一一对应,既uv[0]代表的是vertices[0]的uv值。而与三角形组成的顺序无关。当每个顶点被赋予uv值后,在片段着色阶段,片段着色器将会根据顶点的uv值将此三角形覆盖的每个像素的uv值进行自动插值。uv插值是以三角形为单位进行的,既三角形ABC内各个像素的uv值与其他周边三角形各顶点的uv值是无关的。
4.三角形序列(triangle):triangles是一个int数组,这个数组是包含顶点数组索引的三角形列表。
三角形数组的大小是3的倍数,每三个int代表的是由哪三个顶点并由什么顺序(朝向)来组成一个三角形。
mesh.triangles决定了网格中的三角形的形状和朝向。三角形的渲染顺序与三角形的正面法线呈左手螺旋定则。三角形的三个点顺时针的是朝向我们,逆时针则背对我们。
5.MeshFilter(网格过滤器):MeshFilter含有一个Public成员 Mesh。在Mesh中存储着三维模型的数据(uv,triangle,vertex等)
二.四边形Mesh源码
using System.Collections; using System.Collections.Generic; using UnityEngine;public class QuadMeshTest:MeshTest {//2 * sizepublic int size = 20;//顶点protected override Vector3[] Vertices{get{Vector3[] vertices = new Vector3[4];vertices[0] = new Vector3(-1, 1, 0) * size;vertices[1] = new Vector3(-1, -1, 0) * size;vertices[2] = new Vector3(1, -1, 0) * size;vertices[3] = new Vector3(1, 1, 0) * size;return vertices;}}//三角形序列protected override int[] Triangles{get{//顺时针面向int[] triangles = new int[6]{1, 0, 3, 3, 2, 1};// //逆时针背对// int[] triangles = new int[6]// {// 1, 2, 3, 3, 0, 1,// };//// //双面网格// int[] triangles = new int[12]// {// 1, 2, 3, 3, 0, 1, 1, 0, 3, 3, 2, 1// };return triangles;}}protected override string MeshName{get{return "QuadMesh";}}//纹理坐标protected override Vector2[] Uvs{get{Vector2[] uvs = new Vector2[4];uvs[0] = new Vector2(0, 1);uvs[1] = new Vector2(0, 0);uvs[2] = new Vector2(1, 0);uvs[3] = new Vector2(1, 1);return uvs;}}//法线protected override Vector3[] Normals{get{mesh.RecalculateNormals();return mesh.normals;}} }
网格(Mesh)基础相关推荐
- [Unity 学习] - 进阶篇 - Mesh基础系列1:生成网格
[Unity 学习] - 进阶篇 - Mesh基础系列1:生成网格 本文并非原创,只是本人的学习记录,原文是由放牛的星星老师翻译Catlike系列教程 链接: https://mp.weixin.qq ...
- 【Shader】网格 Mesh
Mesh 1. 网格 Mesh 2. Mesh的组成 2.1 Vertex Data 2.2 Topology 2.3 Index data 1. 网格 Mesh Mesh指的就是模型的网格,它决定物 ...
- Unity Mesh基础知识
Unity Mesh基础知识 什么是Mesh Mesh的组成部分 利用Mesh创建一个Cube 创建Cube 顶点坐标 渲染 转载链接 什么是Mesh Mesh是指的模型的网格,3D模型是由多 ...
- 【MATLAB】三维图形绘制 ( 三维平面图 | 二维网格 | meshgrid 函数 | 绘制网格 | mesh 函授 | 绘制平面 | surf 函数 | 绘制等高线 | contour 函数 )
文章目录 一.二维网格 1.线图 与 平面图 2.meshgrid 函数生成二维网格 二.绘制网格 1.mesh 函数绘制网格 2.代码示例 三.绘制平面 1.surf 函数绘制平面 2.代码示例 四 ...
- oracle 12c dg新特性,oracle 12c:新特性-网格(Grid)基础架构的增强
oracle 12c:新特性-网格(Grid)基础架构的增强,传统标准集群和Flex集群. Flex 集群 Oracle 12c 在集群安装时支持两类配置:传统标准集群和Flex集群.在一个传统标准集 ...
- OpenGL 网格Mesh
OpenGL 网格Mesh 网格Mesh简介 初始化 渲染 网格Mesh简介 通过使用Assimp,我们可以加载不同的模型到程序中,但是载入后它们都被储存为Assimp的数据结构.我们最终仍要将这些数 ...
- 万丈高楼平地起 ——浅谈网格计算基础
万丈高楼平地起 --浅谈网格计算基础 网格技术的产生.发展必须具备以下三个基本条件:计算资源的广域分布.网络技术(特别是Internet)以及不断增长的对资源共享的需求.在计算器技术发展的早期阶段,只 ...
- D3D中的网格(Mesh)
该教程基于DirectX 8.0 Graphics, 一部分内容由DirectX 8.0 SDK 英文文档翻译而来,一部分是自己工作经验的总结,作者对此享有著作权,读者可任意拷贝和传播,但不包含商业的 ...
- opengl网格mesh
和材质和网格(Mesh)一样,所有的场景/模型数据都包含在Scene对象中.Scene对象也包含了场景根节点的引用. 场景的Root node(根节点)可能包含子节点(和其它的节点一样),它会有一系列 ...
- 自己动手实现蓝牙MESH应用系列 | 第一篇:蓝牙MESH基础概念介绍
文章目录 1. 前言 2. 概述 2.1. 蓝牙风格(Flavors) 2.2. mesh网络的动机 2.3. mesh网络中的消息传输方式 2.3.1. 以消息为中心的通信 - 发布/订阅(publ ...
最新文章
- vue webpack打包入口文件是哪个_Vue项目起步
- python nltk lemmatizer_Python聊天机器人–使用NLTK和Keras构建第一个聊天机器人
- python正则r的作用_Python正则表达式,这一篇就够了!
- matlab1 3倍频程,瞬时声压时域数据怎么用matlab进行1/3倍频程声压级分析
- VS2012快捷键突然不能用怎么办
- Linux命令su、sudo、sudo su、sudo -i使用和区别
- 10个有关RESTful API良好设计的最佳实践
- 深度学习|三维重建:R-MVSNet
- Hadoop中MR程序的几种提交运行模式
- 清华大学计算机系网络课程,资源分享:清华大学计算机系网络课程.pdf
- yaml 变量引用_Yaml语法使用
- 放大器的频率特性(2)-- 共源极的频率特性
- 网络私有云存储的几点优势
- MATLAB图像处理_YUV格式详解
- 【广告算法工程师入门 32】从直播答题,跳一跳,抢红包等产品策略扯到用户受益商业变现
- 第八章 界面外观——Qt
- 在Ubuntu中配置中文输入法
- 《算法导论》第六章之堆和优先级队列相关算法C语言实现
- Python 办公小助手:读取 PDF 中表格并重命名
- Iocomp Components Full Sources Product
热门文章
- 图的四色着色(C语言)
- MVC 过滤器使用 ActionFilterAttribute
- 杰奇CMS phpmyadmin清空数据库ID归零重新入库数据SQL语句教程
- Istio 流量治理
- 惯性导航和惯性器件(一)
- 使用Emulator时的坏习惯
- 深度学习图像超分辨率开山之作SRCNN——原理分析及代码(效果基本可以达到论文中的效果)
- 【计算机视觉】图像分割中FCN、DeepLab、SegNet、U-Net、Mask R-CNN等算法的讲解(图文解释 超详细)
- IDA中点击apply patches to 显示 patching canceled..导致无法使用
- android 最新微信支付,android最新微信支付总结