Mesh网格篇(一)代码生成圆柱Mesh
来源:互联网 发布:zoomla 逐浪cms 编辑:程序博客网 时间:2024/05/02 00:25
最终效果
基本知识
网格的顶点顺序
如果要生成上面的网格,需要4个点的坐标,需要一个顶点索引,顶点索引的顺序是,021 是一个三角面,123是一个三角面,而且还要生成UV,为一组vector2数组。当然一个网格信息可以包含权重,法线,切线,颜色等等其他信息。
顶点的信息是有限的
一个顶点,可以分配一个UV信息,也就是说如果生成一个6边的圆柱,你需要7个边的顶点,第一边和最后一边重合,来生成0-1之间的UV值,包括法线,切线,颜色等,如果你需要一个顶点有3个法线面向,那就需要在这个位置生成3个顶点。
源代码
public void CreateMesh(int edg_x, int edg_y, float rad, float len) { edg_x = Mathf.Max(2, edg_x);//保证最低2个边 edg_y = Mathf.Max(2, edg_y); int _deglen = edg_x * edg_y + edg_y; normals = new Vector3[_deglen]; verts = new Vector3[_deglen]; uvs = new Vector2[_deglen]; int[] trians = new int[edg_x * (edg_y - 1) * 6]; float reg = 6.28318f / edg_x; float _len = len / (edg_y - 1); Vector2 uvStep = new Vector2(1f / edg_x, 1f / (edg_y - 1)); for (int y = 0; y < edg_y; y++) for (int x = 0; x < edg_x + 1; x++)//多一个边来保存UV值 { int i = x + y * (edg_x + 1); verts[i] = new Vector3(Mathf.Sin((reg * (x % edg_x) + angle) % 6.28318f) * rad, Mathf.Cos((reg * (x % edg_x) + angle) % 6.28318f) * rad, y * _len);//计算顶点坐标 normals[i] = -new Vector3(verts[i].x, verts[i].y, 0);//计算法线方向 int id = x % (edg_x + 1) * 6 + y * edg_x * 6; if (x < edg_x + 1 && y < edg_y - 1 && (id + 5) < trians.Length)//计算顶点数组 { trians[id] = i; trians[id + 1] = trians[id + 4] = i + edg_x + 1; trians[id + 2] = trians[id + 3] = i + 1; trians[id + 5] = i + edg_x + 2; } if (edg_x != 2)//计算UV,考虑到2个边的情况 uvs[i] = new Vector2(x == edg_x ? 1f : uvStep.x * x, y == edg_y - 1 ? 1f : uvStep.y * y); else uvs[i] = new Vector2(x % edg_x, y == edg_y - 1 ? 1f : uvStep.y * y); } Mesh _mesh = new Mesh(); _mesh.vertices = verts; _mesh.triangles = trians; _mesh.uv = uvs; _mesh.normals = normals; MeshFile.mesh = _mesh;//赋值 }
以上就是源码,如果有更好的方法欢迎指正,下一片,我们来弯曲这个网格。
0 0
- Mesh网格篇(一)代码生成圆柱Mesh
- Mesh网格编程(一) 流体
- Mesh网格编程(一) 流体水
- Mesh网格编程(一) 流体
- 网格(mesh)简化
- Mesh网格篇(二)网格的快速切割
- Mesh网格篇(三)绘制交互网格
- 【Unity】Mesh网格编程(一)正二十面体
- 【Unity】Mesh网格编程(一)正二十面体
- 凸面体网格(convex mesh)
- 【Unity】Mesh网格编程(二)流体
- Mesh.CombineMeshes 合并网格
- Mesh网格基础知识
- u3d Mesh网格基础知识
- 合并Mesh网格
- Mesh 网格类
- Mesh网格基础知识
- u3d Mesh网格基础知识
- Orocos Activity&ExecutionEngine 解析
- linux基本命令(49)——at命令
- 有用的sleep(1)
- MAC下php出现:Call to undefined function Think\imagettftext()的解决办法
- Android 知名博客
- Mesh网格篇(一)代码生成圆柱Mesh
- iOS UIApplication功能
- 从零开始学shell(4)--命令行及处理
- org.hibernate.QueryException:Expected positional parameter count: 1
- Linux 输入设备驱动上报按键值方法
- 程序员必备神器
- leetcode345
- IT女性的职业困惑 (1)
- java中Array/List/Map/Object与Json互相转换详解