unity中已知几个点用mesh让这些点在一个平面上


为了方便把这些cube放到了一个空的父物体下(这里就不再用图片展示了)

 

 

这个代码就是把获取所有的cube的position存到了一个列表中

void DrawMesh(Vector3[] vec)
{

//创建一个空的gameObject 这里我的名字就叫做box
GameObject box = new GameObject("Box");

//为其添加MeshFilter、MehsRenderer   它获取mesh资源,运用MeshRenderer渲染到屏幕上

box.AddComponent<MeshFilter>();
box.AddComponent<MeshRenderer>();

Mesh mesh = new Mesh();

//将这些cube的position存到了一个数组中

Vector3[] top_Vec = vec;

List<int> top_list = new List<int>();

for (int i = 0; i < top_Vec.Length - 1; i++)
{

  //通过不同的三个顶点为网格创建三角形,网格是由多个三角形构成的一个面,构成三角形的个数为(n-2)个(注:注意这个小练习的顶点有5个但实际上是由3个三角形拼成的,但是top_list中有4组信息,但我们可以将这个列表计算一下

  0,1,4       1,2,3      2,3,2     3,4,1      这四组单2,3,2 这一组其实是一条线并非一个三角形)

  top_list.Add(i);
  top_list.Add(i + 1);
  top_list.Add(top_Vec.Length - i - 1);
}

//储存定点信息
mesh.vertices = top_Vec;

//将遍历三角形的顶点顺序储存到列表中并转化成数组, 我认为它会自动解析这个数组(以每三个点进行解析吧) 
mesh.triangles = top_list.ToArray();

//重新计算法线、uv

mesh.RecalculateBounds();
mesh.RecalculateNormals();

box.GetComponent<MeshFilter>().mesh = mesh;

//这里的材质是我自己设置的
box.GetComponent<MeshRenderer>().material = material;

 

 

注意:1.想要构成一个面这些点必须按照顺序摆放,如果不按顺序会构不成一个面或者其中某几个点构成一个面(说白了就是缺少三角形)

   2.这些点建议按顺时针摆放,因为生成的mesh渲染的时候是单面材质在正面可以看到渲染而背面却看不到,如果不小心按逆时针摆放的话把shader -> Nature->SpeedTree  cill选择off 修改材质的shader就可以看到了(原因我还没搞懂)

 

 效果如图


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM