unity 脚本创建 MESH(网格)
2017-12-21 11:46
573 查看
Unity 脚本创建 Mesh
网格由点面 , 组成 , 每个面是三个顶点构成
代码如下:
运行结果
三角形面的顺时针法则 (这个法则是我个人的叫法 不知相关是否有特定的名称。)
我们修改一下代码 在每一个顶点上添加一个物体以作说明
结果
0,1,2 顶点 分别是红方块 , 绿球 , 蓝圆柱
在这个角度 (主摄相机 是默认位置方向 位置(0,1,-10) 方向(0,0,0) )。就是在 Z 为-10 的位置看原点 (严格来说应该是看向 0,1,0 位置) 方向 是正Z 轴方向。 我们可以看到 0,1,2 顺序 的三角而 这时 是顺时针 下 —-> 上——> 右上 , 这时可以看到面
然后 我们 再设置一下主摄相机 的位置 和方向 位置 (0,1 ,10) 旋转(0,180,0)
结果
在这个结果 是摄相机 从Z =10 的位置看 原点, 方向为负Z轴, 0,1,2 的三角面 是逆时针
下 ——》上 ——》 上右 这时看不到三角面(因为三角面的背面是不渲染的)
网格由点面 , 组成 , 每个面是三个顶点构成
代码如下:
using UnityEngine; using System.Collections; public class mesh01 : MonoBehaviour { // Use this for initialization void Start () { CreatePlane (); } // Update is called once per frame void Update () { } void CreatePlane(){ GameObject plane = new GameObject (); plane.name = "plane"; // 添加组件 MeshFilter mfilter =plane.AddComponent<MeshFilter> (); MeshRenderer render = plane.AddComponent<MeshRenderer> (); // 添加默认的材质 render.material=new Material(Shader.Find("Diffuse")); //mfilter.mesh = new Mesh (); Mesh mesh = mfilter.mesh; // 设置三个顶点 mesh .vertices = new Vector3[] { new Vector3 (0, 0, 0), new Vector3 (0, 1, 0), new Vector3 (1, 1, 0) }; // 设置三角形 (面) 这里 三个点的顺序 应该有(顺时针法则) mesh.triangles = new int[]{ 0,1,2 }; // 重新计算法线 mesh.RecalculateNormals (); } }
运行结果
三角形面的顺时针法则 (这个法则是我个人的叫法 不知相关是否有特定的名称。)
我们修改一下代码 在每一个顶点上添加一个物体以作说明
void CreatePlane(){ GameObject plane = new GameObject (); plane.name = "plane"; // 添加组件 MeshFilter mfilter =plane.AddComponent<MeshFilter> (); MeshRenderer render = plane.AddComponent<MeshRenderer> (); // 添加默认的材质 render.material=new Material(Shader.Find("Diffuse")); //mfilter.mesh = new Mesh (); Mesh mesh = mfilter.mesh; // 设置三个顶点 mesh .vertices = new Vector3[] { new Vector3 (0, 0, 0), new Vector3 (0, 1, 0), new Vector3 (1, 1, 0) }; GameObject a0 = GameObject.CreatePrimitive (PrimitiveType.Cube); a0.transform.position = mesh .vertices [0]; Vector3 miniScale = new Vector3 (0.1f, 0.1f, 0.1f); a0.transform.localScale = miniScale; a0.GetComponent<MeshRenderer> ().material.color = Color.red; GameObject a1 = GameObject.CreatePrimitive (PrimitiveType.Sphere); a1.transform.position = mesh .vertices [1]; a1.transform.localScale = miniScale; a1.GetComponent<MeshRenderer> ().material.color = Color.green; GameObject a2 = GameObject.CreatePrimitive (PrimitiveType.Cylinder); a2.transform.position = mesh .vertices [2]; a2.transform.localScale = miniScale; a2.GetComponent<MeshRenderer> ().material.color = Color.blue; // 设置三角形 (面) mesh.triangles = new int[]{ 0,1,2 }; // 重新计算法线 mesh.RecalculateNormals (); }
结果
0,1,2 顶点 分别是红方块 , 绿球 , 蓝圆柱
在这个角度 (主摄相机 是默认位置方向 位置(0,1,-10) 方向(0,0,0) )。就是在 Z 为-10 的位置看原点 (严格来说应该是看向 0,1,0 位置) 方向 是正Z 轴方向。 我们可以看到 0,1,2 顺序 的三角而 这时 是顺时针 下 —-> 上——> 右上 , 这时可以看到面
然后 我们 再设置一下主摄相机 的位置 和方向 位置 (0,1 ,10) 旋转(0,180,0)
结果
在这个结果 是摄相机 从Z =10 的位置看 原点, 方向为负Z轴, 0,1,2 的三角面 是逆时针
下 ——》上 ——》 上右 这时看不到三角面(因为三角面的背面是不渲染的)
相关文章推荐
- unity, 用脚本创建mesh
- < Unity 3D专栏 >动态创建对象,并渲染贴图,动态添加删除脚本
- 【Unity】6.3 通过 C# 脚本创建和访问游戏对象
- unity中利用mesh动态创建墙体
- Unity 及 VS2015 创建脚本时自动添加头部注释
- Unity网格编程篇(二) 非常详细的Mesh编程入门文章
- [我给Unity官方视频教程做中文字幕]beginner Graphics – Lessons系列之网格渲染器和过滤器Mesh renderers and filters
- Unity 3D 动态创建对象,并渲染贴图,动态添加删除脚本
- 【Unity】Mesh网格编程(一)正二十面体
- Unity MeshBaker 合并网格和材质
- Unity 3D 创建Mesh(一)
- Unity教程之-制作闪亮的星星Star(一):动态的创建Mesh
- 【Unity】Mesh网格编程(一)正二十面体
- Unity动态创建的Mesh,导出为Obj模型文件,并生成Prefab文件
- Unity 修改默认创建 C# Script 脚本格式
- Unity-编辑器创建Lua脚本模版-热更新
- 在Unity中用脚本根据mesh是否连接分离mesh
- unreal 4.18版本 右键点击静态网格资源未显示创建可破坏物体(create destructible mesh)
- Unity 3D 创建Mesh(一)
- 关于Unity中Mesh网格的详解