Unity 画三角形

来源:互联网 发布:java 加载 scala脚本 编辑:程序博客网 时间:2024/06/08 15:27
首先创建Unity工程,接着创建一个空的游戏对象,然后给该游戏对象绑定Mesh Filter组件 与 Mesh Renderer组件。
Mesh Filter组件:表示网格面,这个网格面是由我们使用代码将所有三角形拼接起来生成的面。

Mesh Renderer组件:表示表示网格的渲染,可设置一个渲染的材质,它包括贴图与颜色。



       如下图所示,我说说里面比较重要的属性。Mesh Renderer中,Materials下拉列表中可设置网格模型的材质,此时我们设置了一个红色的材质。 Mesh Filter:目前为None,也不用再编辑器中为它赋值,因为这个网格模型我们会在代码中生成并且赋值。在下面就是方刚我们设置绿色的材质资源,Shader中设置了贴图的属性,目前是GUI/ TextShader。它表示这个材质的渲染级别在GUI上,就是优先级是最一层的。举个例子无论在这个网格模型的前面绘制多少模型,它永远都会在最前面显示。





 

OK,现在资源文件都已经准备完毕,下面我们学习如何来绘制一个三角形,从简单的开始。把下面的代码绑定在摄像机对象当中。

using UnityEngine;using System.Collections;public class Scene : MonoBehaviour {// Use this for initializationvoid Start () {//获取MeshFilter对象  现在还是空的。MeshFilter meshFilter = (MeshFilter)GameObject.Find("MeshMat").GetComponent(typeof(MeshFilter));//得到对应的网格对象Mesh mesh = meshFilter.mesh;//三角形顶点坐标数组Vector3[] vertices = new Vector3[3];//三角形的坐标点  ,这里先不考虑Z轴vertices[0] = new Vector3(0,0,0);vertices[1] = new Vector3(0,1,0);vertices[2] = new Vector3(1,0,0);//三角形顶点数组IDint[] triangles = new int[3];triangles[0] = 0;triangles[1] = 1;triangles[2] = 2;//这里是将模型的顶点数组与坐标数组赋值给网络模型,还记得刚刚在//创建MeshFilter时,当时没有在编辑器里为网络模型赋值,实际上代码走到这里就会重新为//网络模型创建MeshFilter赋值的,接着我们再代码中绘制的三角形就会显示的窗口中mesh.vertices = vertices;mesh.triangles = triangles;}// Update is called once per framevoid Update () {}}

                    


  之后,我们来练习一下绘制4个三角形。

using UnityEngine;using System.Collections;public class Scene : MonoBehaviour{private int VERTICES_COUNT = 6;void Start(){MeshFilter meshFilter = (MeshFilter)GameObject.Find("MeshMat").GetComponent(typeof(MeshFilter));Mesh mesh = meshFilter.mesh;Vector3[] vertices = new Vector3[VERTICES_COUNT];int triangles_count = VERTICES_COUNT -2;vertices[0] = new Vector3(0,0,0);vertices[1] = new Vector3(0,1,0);vertices[2] = new Vector3(1,0,0);vertices[3] = new Vector3(1,1,0);vertices[4] = new Vector3(2,0,0);vertices[5] = new Vector3(2,1,0);int[] triangles = new int[triangles_count * 3];triangles[0] = 0;triangles[1] = 1;triangles[2] = 2;triangles[3] = 3;triangles[4] = 2;triangles[5] = 1;triangles[6] = 2;triangles[7] = 3;triangles[8] = 4;triangles[9] = 5;triangles[10] = 4;triangles[11] = 3;mesh.vertices = vertices;mesh.triangles = triangles;}}



        改进算法后。


using UnityEngine;using System.Collections;public class Scene : MonoBehaviour{private int VERTICES_COUNT = 6;void Start(){MeshFilter meshFilter = (MeshFilter)GameObject.Find("MeshMat").GetComponent(typeof(MeshFilter));Mesh mesh = meshFilter.mesh;Vector3[] vertices = new Vector3[VERTICES_COUNT];vertices[0] = new Vector3(0,0,0);vertices[1] = new Vector3(0,1,0);vertices[2] = new Vector3(1,0,0);vertices[3] = new Vector3(1,1,0);vertices[4] = new Vector3(2,0,0);vertices[5] = new Vector3(2,1,0);int triangles_count = VERTICES_COUNT - 2;int[] triangles = new int[triangles_count * 3];for(int i =0;i < 4; i++){for(int j =0;j < 3;j++){if(i % 2 ==0){triangles[i* 3 +j] = i+j;}else{triangles[i * 3 +j] = i + 2 -j;}}}mesh.vertices = vertices;mesh.triangles = triangles;}}



原创粉丝点击