unity如何通过Mesh网格绘制图形球体
发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,小编给大家分享一下unity如何通过Mesh网格绘制图形球体,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!球体public
千家信息网最后更新 2025年11月08日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安全错误
数据库的锁怎样保障安全
企业网络安全存在的问题
软件开发管理费用分录怎么做
简约网络安全手抄报展示
阳新互联网络科技有限公司
云南邮箱外贸软件开发
互联网科技对智能家居的影响
打印监控软件开发
计算机网络技术需要什么成绩
服务器搭建网站需要用电脑吗
科学出版社数据库电子书下载
上海智能化网络安全
unwider数据库
南宁银行+软件开发
网络安全纪律
网络技术fmp是什么意思
GEO数据库下载哪几个文件
数据库领域A类会议多厉害
出名的网络安全事件
安庆餐饮软件开发外包公司
网络安全设备租赁招标
网络数据库开发 音乐网站
qq邮箱的服务器ip
软件开发属于非专利技术
火神软件开发好还是测试好
无法解析服务器名称或地址
天津常规软件开发科技
数据库字段的数据类型包括
广州pdu服务器电源厂家定制
软件开发 用例表是干嘛的
sql数据库修改