unity如何通过Mesh网格绘制图形球体
发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,小编给大家分享一下unity如何通过Mesh网格绘制图形球体,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!球体public
千家信息网最后更新 2026年11月02日unity如何通过Mesh网格绘制图形球体
小编给大家分享一下unity如何通过Mesh网格绘制图形球体,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!
球体
public class 球体 : MonoBehaviour{ MeshRenderer meshRenderer; MeshFilter meshFilter; List verts; List indices; int N = 10; void Start() { verts = new List(); indices = new List(); meshRenderer = GetComponent(); meshFilter = GetComponent(); BuildModel(); } void BuildModel() { for(float i = -N / 2f; i <= N / 2f; i++) { for(float j = -N / 2f; j <= N / 2f; j++) { verts.Add(new Vector3(i, j, -N / 2f)); } } for (float i = -N / 2f; i <= N / 2f; i++) { for (float j = -N / 2f; j <= N / 2f; j++) { verts.Add(new Vector3(N / 2f, j, i)); } } for (float i = -N / 2f; i <= N / 2f; i++) { for (float j = -N / 2f; j <= N / 2f; j++) { verts.Add(new Vector3(i, N / 2f, j)); } } for (float i = -N / 2f; i <= N / 2f; i++) { for (float j = -N / 2f; j <= N / 2f; j++) { verts.Add(new Vector3(-N / 2f, j, i)); } } for (float i = -N / 2f; i <= N / 2f; i++) { for (float j = -N / 2f; j <= N / 2f; j++) { verts.Add(new Vector3(i, j, N / 2f)); } } for (float i = -N / 2f; i <= N / 2f; i++) { for (float j = -N / 2f; j <= N / 2f; j++) { verts.Add(new Vector3(i, -N / 2f, j)); } } //真正控制球体成型的部分 for (int i = 0; i < verts.Count; i++) { verts[i] = verts[i].normalized; } //绘制 MakePos(0); MakePos(1); MakePos(2); OtherMakePos(3); OtherMakePos(4); OtherMakePos(5); Draw(); } public void MakePos(int num) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { int index = j * (N + 1) + (N + 1) * (N + 1)* num + i; int up = (j + 1) * (N + 1) + (N + 1) * (N + 1)* num + i; indices.AddRange(new int[] { index, index + 1, up + 1 }); indices.AddRange(new int[] { index, up + 1, up }); } } } public void OtherMakePos(int num) { for (int i = 0; i < N + 1; i++) { for (int j = 0; j < N + 1; j++) { if (i != N && j != N) { int index = j * (N + 1) + (N + 1) * (N + 1) * num + i; int up = (j + 1) * (N + 1) + (N + 1) * (N + 1) * num + i; indices.AddRange(new int[] { index, up + 1, index + 1 }); indices.AddRange(new int[] { index, up, up + 1 }); } } } } public void Draw() { Mesh mesh = new Mesh(); mesh.vertices = verts.ToArray(); mesh.triangles = indices.ToArray(); mesh.RecalculateNormals(); mesh.RecalculateBounds(); meshFilter.mesh = mesh; }} 原理
假设手里有个空的正方体牛奶盒,我们拿习惯向里吹起,会让牛奶盒的六个面都鼓起来。牛奶盒够软并且气体足够多的话,它就会越逼近球体。
即:先创建一个正方体/长方体/正八面体等等等等,只要是个闭合的图形并且顶点的数量够多分布的够均匀,效果应该就不错。
然后将所有的顶点和物体中心连线并截取同样的长度,保证所有顶点到中心点的距离相等。
调整所有三角形顶点的坐标和物体中心的距离相等:
取正方体的中心点作为球的中心点,也是为了让各个顶点分布的比较均匀。
以下是设定球的半径为1并且中心点刚好在(0,0,0)的情况:
for (int i = 0; i < verts.Count; i++) { verts[i] = verts[i].normalized; }若中心点不在(0,0,0)的话
for (int i = 0; i < verts.Count; i++) { Vector3 vec3 = verts[i]; Vector3 o = new Vector3(1, 2, 3);//例如中心点在(1,2,3) verts[i] = o + (vec3 - o).normalized; }效果:
以上是"unity如何通过Mesh网格绘制图形球体"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!
j++
球体
中心点
顶点
图形
正方
正方体
牛奶
篇文章
网格
内容
效果
物体
不错
三角形
不怎么
八面体
半径
原理
坐标
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
手磨咖啡
小米移动互联网科技园
互联网科技深圳
互联网下的科技发展
互联网科技社
互联网科技的发展
卓越科技(互联网 )
云电互联网科技
顺网科技2021年互联网排名
来此购互联网科技有限公司
佳云科技和互联网广告
和信科技工业互联网
宜昌元轩互联网科技有限公司
互联网行业科技股
山东子淼互联网科技有限公司
互联网第三次科技革命特征
互联网科技数字货币
互联网科技品牌
河南商务圈互联网科技有限公司
山东亿川互联网科技有限责任公司
互联网科技有限公司
互联网是第几次科技革命的成果
互联网科技社
贷财互联网科技
汉立互联网科技有限公司联系电话
隆华科技工业互联网
字节跳动和互联网科技
佳云科技和互联网广告
互联网科技机房
互联网领先科技成果宣传视频