Unity网格编程篇(二) 非常详细的Mesh编程入门文章 |
您所在的位置:网站首页 › 苹果的网格有什么用处 › Unity网格编程篇(二) 非常详细的Mesh编程入门文章 |
Procedural Grid Programming Form
代码实现网格
本文目标
创建网格坐标使用协程计算他们的位置利用三角形确定一个面自动生成法线添加纹理坐标和切线
在这篇教程中我们将利用顶点和三角面创建一个网格。 这篇博客的原文地址: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平铺的效果,这去取决于纹理设置。我们是需要引用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。
什么是Gizmos? 在编辑模式下Gizmos可以提供可视化的提示。它们只在Scene场景中显示不在Play模式下显示,但是你可以通过工具栏调整它们。Gizmos公共类允许你绘制图标,线条,和其他的东西。Gizmos在OnDrawGizmos方法中执行绘制,它被Unity编辑器自动调用。另一个可选的方法是OnDrwaGizmosSelected,它只能被可选的对象调用。这时在编辑模式下会有一个Bug,因为OnDrawGizmos方法在编辑模式下被调用了,但此时我们的顶点数组为空。为防止这个错误发生,我们在OnDrawGizmos方法中添加一个顶点数组为空就跳出方法的操作。 private void OnDrawGizmos () { if (vertices == null) return; … } |
今日新闻 |
点击排行 |
|
推荐新闻 |
图片新闻 |
|
专题文章 |
CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭 |