Unity3d生成Mesh
来源:互联网 发布:js设置延迟时间 编辑:程序博客网 时间:2024/06/05 23:02
因为项目需要导入已知点,根据已知点生成一个类似于圆胎的Mesh,所以想了下Mesh生成物体的代码逻辑。
假设现在有9个Vertice(Vector3),横向HorizontalNumber=3,纵向Horizontal=3,那么按照三角形生成原理,有索引145,152,256,263,478,485,589,596。总共24个int类型的索引Triangles(int),点的数量和索引数量之间的关系是triangles=(horizontalNumber-1)*(horizontal-1)*6。可以得到这样的代码,很神奇的算法,过了一段时间自己都忘了他是怎么来的。
for (int i = 0; i < (horizontalNumber - 1) * (horizontal - 1); i++) { trialges.Add(i + i / (horizontalNumber - 1)); trialges.Add(i + horizontalNumber + i / (horizontalNumber - 1)); trialges.Add(i + horizontalNumber + 1 + i / (horizontalNumber - 1)); trialges.Add(i + i / (horizontalNumber - 1)); trialges.Add(i + horizontalNumber + 1 + i / (horizontalNumber - 1)); trialges.Add(i + 1 + i / (horizontalNumber - 1)); }
然后,因为点过多,需要多个Mesh之间相互连接,需要共享一组横坐标相同的数据,allTireList.RemoveRange(0, oneMeshVertices - horizontalNumber);这一句保留了那一段点的数据。
for (int oneMeshVertices = horizontalNumber * horizontal, ts = (horizontalNumber - 1) * (horizontal - 1) * 6; i < meshCount - 1; i++) { Mesh mesh = tireGameObject[i].GetComponent<MeshFilter>().mesh; mesh.Clear(); mesh.SetVertices(tireVector3[i]); mesh.SetTriangles(trianglesList[i], 0); tireVector3[i] = new List<Vector3>(); tireVector3[i] = allTireList.Skip(0).Take(oneMeshVertices).ToList(); allTireList.RemoveRange(0, oneMeshVertices - horizontalNumber); trianglesList[i] = trialges.Skip(0).Take(ts).ToList(); }
到最后因为还要首尾连接,所以要先读取第一行的数据。`
List<Vector3> firstCell = allTireList.Skip(0).Take(horizontalNumber).ToList(); int index = tireVector3.Length - 1; tireVector3[index] = new List<Vector3>(); tireVector3[index] = allTireList.Skip(0).Take(allTireList.Count).ToList(); for (i = 0; i < horizontalNumber; i++) { tireVector3[index].Add(firstCell[i]); } trianglesList[index] = new List<int>(); int remainderVertices = (horizontalNumber - 1) * allTireList.Count / horizontalNumber; for (i = 0; i < remainderVertices; i++) { trianglesList[index].Add(i + i / (horizontalNumber - 1)); trianglesList[index].Add(i + horizontalNumber + i / (horizontalNumber - 1)); trianglesList[index].Add(i + horizontalNumber + 1 + i / (horizontalNumber - 1)); trianglesList[index].Add(i + i / (horizontalNumber - 1)); trianglesList[index].Add(i + horizontalNumber + 1 + i / (horizontalNumber - 1)); trianglesList[index].Add(i + 1 + i / (horizontalNumber - 1)); }
最后的效果图是这样的
阅读全文
0 0
- Unity3d生成Mesh
- 【Unity3D】Mesh
- unity3d 更换装备mesh
- 【边玩边学Unity3d】Mesh属性
- 【边玩边学Unity3d】Mesh属性
- Unity3D-Mesh创建
- 【边玩边学Unity3d】Mesh属性
- Unity3D Mesh.bindposes
- Unity3D中的Mesh
- UNITY3D 自定义Mesh
- Unity3D 动态创建Mesh
- unity3d Mesh合并
- Unity3D 动态创建的Mesh,导出为Obj模型文件,并生成Prefab文件
- Unity3d Nav Mesh 自带寻路
- Unity3D开发之创建mesh
- Unity Mesh生成图形
- 自动生成路径mesh
- Unity3d mesh Filter和mesh Render双生双克
- Lecture 18
- 怎么解决java.lang.NoClassDefFoundError错误
- Android 6.0以后获取本地mac地址
- Unity自定义UI组件(六)日历、日期拾取器
- URL访问地址和Tomcat项目部署中不得不说的小秘密
- Unity3d生成Mesh
- Android Lint
- 更改dialog样式activity在屏幕中显示的位置
- Python入门系列——第18篇
- 微信接入之获取用户头像
- Spring Cloud微服务(7)之Feign服务之间调用
- Unity自定义UI组件(七)渐变工具、渐变色图片、渐变遮罩
- mybatis批量插入
- 经典公式sum=sum+i求和函数