在Unity使用自定义网格生成一个球体

1.在Unity场景中新建一个空物体,在空物体上添加MeshRenderer和MeshFilter组件。

2.新建一个C#脚本命名SphereMesh,将脚本挂载到空物体上,如图:

运行场景就可以看到生成一个球体

全部代码如下:

using UnityEngine;public class SphereMesh : MonoBehaviour
{void Start(){CreateSphereMesh();}void CreateSphereMesh(){MeshRenderer meshRenderer = gameObject.GetComponent<MeshRenderer>();meshRenderer.sharedMaterial = new Material(Shader.Find("Standard"));MeshFilter meshFilter = gameObject.GetComponent<MeshFilter>();Mesh mesh = new Mesh();SphereShape shape = Init(20,20);mesh.vertices = shape.vertices;mesh.triangles = shape.index;Vector3[] normal = new Vector3[shape.vertices.Length];for (int i = 0; i < shape.vertices.Length; i++) {normal[i] = -Vector3.forward;}mesh.normals = normal;mesh.uv = shape.uv;meshFilter.mesh = mesh;}SphereShape Init(int latCount, int lonCount){if (latCount < 2 || lonCount < 2)return null;int totalIndexCount = 6 * (latCount - 1) * lonCount;int totalVertexCount = (latCount + 1) * (lonCount + 1);float latStep = Mathf.PI / latCount;float lonStep = 2 * Mathf.PI / lonCount;int[] index = new int[totalIndexCount];Vector3[] vertices = new Vector3[totalVertexCount];Vector2[] uv = new Vector2[totalVertexCount];int currentVertex = 0;int currentIndex = 0;for (int lat = 0; lat <= latCount; lat++){for (int lon = 0; lon <= lonCount; lon++){vertices[currentVertex] = new  Vector3(Mathf.Cos(lon * lonStep)*Mathf.Sin(lat * latStep),Mathf.Sin(lon * lonStep) * Mathf.Sin(lat * latStep),Mathf.Cos(lat * latStep - Mathf.PI));uv[currentVertex] = new Vector2((float)lon / lonCount,(float)lat / latCount);currentVertex++;}}int v = lonCount + 1;for (int lon = 0;lon < latCount; lon++) {index[currentIndex++] = lon;index[currentIndex++] = v;index[currentIndex++] = v + 1;v++;}v = lonCount + 1;for (int lat = 1; lat < latCount - 1; lat++){for (int lon = 0; lon < lonCount; lon++){index[currentIndex++] = v;index[currentIndex++] = v + lonCount + 1;index[currentIndex++] = v + 1;index[currentIndex++] = v + 1;index[currentIndex++] = v + lonCount + 1;index[currentIndex++] = v + lonCount + 2;v += 1;}v += 1;}for (int lon = 0; lon < lonCount; lon++){index[currentIndex++] = v;index[currentIndex++] = v + lonCount + 1;index[currentIndex++] = v + 1;v += 1;}SphereShape shape = new SphereShape();shape.index = index;shape.vertices = vertices;shape.uv = uv;return shape;}
}class SphereShape : Shape 
{ }
class Shape
{public int[] index;public Vector3[] vertices;public Vector2[] uv;
}

 

参考链接: 

UV Sphere (winter.dev)icon-default.png?t=N7T8https://winter.dev/projects/mesh/uvsphere

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/127429.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

leetcode42 接雨水

题目 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图&#xff0c;计算按此排列的柱子&#xff0c;下雨之后能接多少雨水。 示例 输入&#xff1a;height [0,1,0,2,1,0,1,3,2,1,2,1] 输出&#xff1a;6 解释&#xff1a;上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高…

Transformer预测 | Pytorch实现基于Transformer的时间序列预测(含单步与多步实验)

文章目录 效果一览文章概述模型描述程序设计单步实验多步实验参考资料效果一览 文章概述 Transformer预测 | Pytorch实现基于Transformer的时间序列预测(含单步与多步实验) Transformer-singlestep.py 包含单步预测模型 Transformer-multistep.py 包含多步预测模型 这是单步预…

BJT晶体管

BJT晶体管也叫双极结型三极管&#xff0c;主要有PNP、NPN型两种&#xff0c;符号如下&#xff1a; 中间的是基极&#xff08;最薄&#xff0c;用于控制&#xff09;&#xff0c;带箭头的是发射极&#xff08;自由电子浓度高&#xff09;&#xff0c;剩下的就是集电极&#xff0…

HashMapConcurrentHashMap

文章目录 1、HashMap基础类属性node容量负载因子hash算法 2、数组链表/树为什么引入链表为什么jdk1.8会引入红黑树为什么一开始不就使用红黑树&#xff1f;HashMap的底层数组取值的时候&#xff0c;为什么不用取模&#xff0c;而是&数组的长度为什么是2的次幂如果指定数组的…

算法-排序算法

0、算法概述 0.1 算法分类 十种常见排序算法可以分为两大类&#xff1a; 比较类排序&#xff1a;通过比较来决定元素间的相对次序&#xff0c;由于其时间复杂度不能突破O(nlogn)&#xff0c;因此也称为非线性时间比较类排序。 非比较类排序&#xff1a;不通过比较来决定元素间…

【AI视野·今日NLP 自然语言处理论文速览 第四十五期】Mon, 2 Oct 2023

AI视野今日CS.NLP 自然语言处理论文速览 Mon, 2 Oct 2023 Totally 44 papers &#x1f449;上期速览✈更多精彩请移步主页 Daily Computation and Language Papers Efficient Streaming Language Models with Attention Sinks Authors Guangxuan Xiao, Yuandong Tian, Beidi C…

Ubuntu MySQL

在安装前&#xff0c;首先看你之前是否安装过&#xff0c;如果安装过&#xff0c;但是没成功&#xff0c;就要先卸载。 一、卸载 1.查看安装 dpkg --list | grep mysql 有东西&#xff0c;就说明您之前安装过mysql。 2.卸载 先停掉server sudo systemctl stop mysql.servic…

KUKA机器人通过直接输入法设定负载数据和附加负载数据的具体操作

KUKA机器人通过直接输入法设定负载数据和附加负载数据的具体操作 设置背景色: 工具负载数据 工具负载的定义: 工具负载数据是指所有装在机器人法兰上的负载。它是另外装在机器人上并由机器人一起移动的质量。需要输入的值有质量、重心位置、质量转动惯量以及所属的主惯性轴。…

C语言之共用体、枚举类型、typedef

共用体 共用体的所有成员共享同一个内存地址 插入一个知识点&#xff1a;字符串不可以直接赋值&#xff0c;要不就在定义的时候赋值&#xff0c;要不就只能使用scanf函数赋值或者<string>中的strcpy赋值 证明 如果要同时访问联合体中多个成员的值...... 则会出现以下情…

ssm+vue的公司人力资源管理系统(有报告)。Javaee项目,ssm vue前后端分离项目。

演示视频&#xff1a; ssmvue的公司人力资源管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;ssm vue前后端分离项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结…

vuejs中封装axios请求集中管理

vuejs中封装axios请求集中管理 前言 在vuejs中&#xff0c;使用axios请求数据&#xff0c;一般会封装一个请求方法&#xff0c;然后在每个页面中调用&#xff0c;这样就造成代码冗余&#xff0c;导致代码可读性差&#xff0c;维护困难。 在项目当中,单独使用axios或者在main.js…

Elasticsearch:语义搜索快速入门

这个交互式 jupyter notebook 将使用官方 Elasticsearch Python 客户端向你介绍 Elasticsearch 的一些基本操作。 你将使用 Sentence Transformers 进行文本嵌入的语义搜索。 了解如何将传统的基于文本的搜索与语义搜索集成&#xff0c;形成混合搜索系统。在本示例中&#xff0…