Unity网格编程篇(二) 非常详细的Mesh编程入门文章

您所在的位置:网站首页 苹果的网格有什么用处 Unity网格编程篇(二) 非常详细的Mesh编程入门文章

Unity网格编程篇(二) 非常详细的Mesh编程入门文章

2024-07-08 07:44:48| 来源: 网络整理| 查看: 265

Procedural Grid Programming Form 代码实现网格 本文目标 创建网格坐标使用协程计算他们的位置利用三角形确定一个面自动生成法线添加纹理坐标和切线

在这篇教程中我们将利用顶点和三角面创建一个网格。

这里写图片描述

0.开始

这篇博客的原文地址:http://catlikecoding.com/unity/tutorials/procedural-grid/ 博主翻译并非100%一字一句翻译,对内容进行部分的增删改。

1.渲染东西 如果你想要在Unity显示一些东西,你需要一个网格。它可以是一个3D模型从另一个程序导入的(比如33dmax or maya)。它也可以是程序生成的网格。它可以是精灵、UI元素或者是粒子系统,它们一样都是使用unity网格,甚至是屏幕特效也是使用网格渲染的。

So,什么是网格?概念上来说网格由图形硬件(GPU Graphics Processing Unit图形处理单元)构成来绘制复杂的材料/东西。它至少包含一组在3D空间中位置明确的点再加一组三角形

最基础的2D图形,由点连接组成,面上的三角形就时此类网格的代表。

因为三角形是平坦的并且拥有直边,所以他们可以完美地被用来显示平坦的和连续的东西,像一个立方体的面孔。曲面的或者是圆的面只能被大量小的三角形来接近组成。如果三角面显示足够的小(不大于一个像素),那么你就不会感觉曲面或者是圆是由三角面组成的。从实时性能角度来讲通常这种情况是不可能的,所以我们总能够在面的某个程度上发现锯齿。

这里写图片描述

这里写图片描述

Unity自带的胶囊体,立方体和球体 着色 vs 线框

如何显示线框 - 再视图左上角选择Display Mode,前三个选项分别是Shaded(着色)、Wrieframe(线框)和Shaded Wrieframe着色并带着线框

如果你想要展示一个3D游戏物体,它必须拥有两个组件。 MeshFilter 这个组件记录了你想要展示的网格数据MeshRenderer 使用这个组件告诉网格如何渲染,比如使用哪个材质球,是否接受阴影和其他设置。

这里写图片描述

为什么是一个材质球数组? - 一个网格渲染器可以有多个材质球,它通常被用来渲染多组三角面,也成为子网格。它通常在外界导入的模型中使用,本篇文章不使用多个材质球。

你可以完全改变网格的显示效果通过调整材质球。Unity默认的材质球是简单的白色立体。你可以自己创建一个新的材质球通过Assets->Create->Material并拖拽到你的游戏物体上来代替它。新的材质球默认为Unity Standard Shader,它有一组口控制,你可以调节这些属性得到你想要模型表现。一个快速添加细节的方法是给你的网格提供一个反射贴图,这个纹理描绘了材质球的基础颜色。当然我们需要知道如何投射纹理到网格的三角面上。这需要添加2D纹理坐标到顶点上。这二维纹理空间被称为U和V,也是常说的UV坐标。UV坐标通常在(0,0)到(1,1)之间,它覆盖了整个纹理。超出范围的坐标将造成clamped或者Tiling平铺的效果,这去取决于纹理设置。

这里写图片描述这里写图片描述这里写图片描述

2.创建网格顶点 So? 如何创建自己的网格?通过创建一个简单的矩形网格来了解一下。这个网格将包括方形瓷砖(单位长度的四边形)。创建一个新的C#脚本并加入水平和垂直尺寸。 using UnityEngine; using System.Collections; public class Grid : MonoBehaviour { public int xSize, ySize; }

我们是需要引用System.Collections? - 我们不需要它去生成我们的网格,但是我引用它因为我稍后将使用协程。

当我们给游戏物体挂上这个脚本,我们需要给它同时添加MeshFilter和MeshRenderer组建。我们可以添加属性在类的前面,Unity将自动为们添加这些类。 [RequireComponent(typeof(MeshFilter), typeof(MeshRenderer))] public class Grid : MonoBehaviour { public int xSize, ySize; } 现在创建一个空物体并挂载组建,它将自动同时添加MeshFilter和MeshRenderer组建。设置MeshRenderer的材质并确保MeshFilter的mesh属性为未定义。并设置网格尺寸为10和5。

这里写图片描述

我们生成真实的网格在物理被唤醒的时候,Awake方法将在我们游戏游戏模式时自动调用。 private void Awake () { Generate(); } 现在我们先考虑顶点位置稍后处理三角面序号。我们需要一个数组存储3D顶点位置。顶点的数量取决于网格的尺寸。我们需要获取每个四边形每个角的顶点,但是相邻的四边形可以共享相同的顶点。所以每个维度商定点数比网格数多一个。

这里写图片描述 4x2网格

private Vector3[] vertices; private void Generate () { vertices = new Vector3[(xSize + 1) * (ySize + 1)]; } 我们在场景中绘制这些顶点,这样我们就可以正确地核对它们的位置。利用OnDrawGizmos方法来绘制顶点的位置,利用OnDrawGizmos在每个顶点绘制一个小球。 private void OnDrawGizmos () { Gizmos.color = Color.black; for (int i = 0; i < vertices.Length; i++) { Gizmos.DrawSphere(vertices[i], 0.1f); } }

什么是Gizmos?

在编辑模式下Gizmos可以提供可视化的提示。它们只在Scene场景中显示不在Play模式下显示,但是你可以通过工具栏调整它们。Gizmos公共类允许你绘制图标,线条,和其他的东西。Gizmos在OnDrawGizmos方法中执行绘制,它被Unity编辑器自动调用。另一个可选的方法是OnDrwaGizmosSelected,它只能被可选的对象调用。

这时在编辑模式下会有一个Bug,因为OnDrawGizmos方法在编辑模式下被调用了,但此时我们的顶点数组为空。为防止这个错误发生,我们在OnDrawGizmos方法中添加一个顶点数组为空就跳出方法的操作。

private void OnDrawGizmos () { if (vertices == null) return; … }

这里写图片描述

点击Play播放按钮之后,在Scene视图中我们只能看见一个球体在世界的原点。因为我们还没有定位顶点的位置,所以所有的球体重叠在一个位置。我们必须会用双重循环遍历所有的位置。 private void Generate () { vertices = new Vector3[(xSize + 1) * (ySize + 1)]; for (int i = 0, y = 0; y


【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭