当前位置: 首页 > news >正文

Unity中Mesh使用MeshTopology.Lines模式绘制线条及MeshTopology.Quads模式绘制网格参考

        Unity中MeshFilter中的Mesh默认情况下使用MeshTopology.Trigangles类型绘制网格,就是通常的绘制三角形网格,实际上Mesh有五种绘制模式,对应MeshTopology的枚举,分别是

Triangles网格由三角形构成。
Quads网格由四边形构成。
Lines网格由线条构成。
LineStrip网格是线条带。
Points网格由点构成。

        这里以Lines和Quads为例说明Trigangles方式之外的绘制方式。

        参考代码如下:

using System.Collections.Generic;
using UnityEngine;public class LineMeshTest : MonoBehaviour
{[SerializeField]Material material;void Start(){GameObject circle = new GameObject("Circle");circle.transform.SetParent(transform);circle.transform.localPosition = new Vector3(-5, 0, 0);MeshFilter filterCircle = circle.AddComponent<MeshFilter>();Mesh meshCircle = GetCircleMesh(2);filterCircle.mesh = meshCircle;MeshRenderer renderCircle = circle.AddComponent<MeshRenderer>();renderCircle.material = material;GameObject quad = new GameObject("Quad");quad.transform.SetParent(transform);quad.transform.localPosition = new Vector3(5, 0, 0);MeshFilter filterQuad = quad.AddComponent<MeshFilter>();Mesh meshQuad = GetQuadMesh(5);filterQuad.mesh = meshQuad;MeshRenderer rendeQuad = quad.AddComponent<MeshRenderer>();rendeQuad.material = material;}Mesh GetCircleMesh(float radius){List<Vector3> vertexList = new();List<int> indexList = new List<int>();float radDelta = Mathf.PI / 36;for (float i = 0; i < 72f; i++){float rad = radDelta * i;Vector3 vert = new(radius * Mathf.Cos(rad), radius * Mathf.Sin(rad), 0);vertexList.Add(vert);}indexList.Add(0);for (int i = 1; i < 72; i++){indexList.Add(i);indexList.Add(i);}indexList.Add(0);Mesh mesh = new();mesh.SetVertices(vertexList);mesh.SetIndices(indexList.ToArray(), MeshTopology.Lines, 0);return mesh;}Mesh GetQuadMesh(float size){float s = size * 0.5f;Vector3[] vertices = new[] { new Vector3(s, s, 0), new Vector3(s, -s, 0), new Vector3(-s, -s, 0), new Vector3(-s, s, 0) };int[] indices = new[] { 0, 1, 2, 3 };Mesh mesh = new Mesh();mesh.SetVertices(vertices);mesh.SetIndices(indices, MeshTopology.Quads, 0);return mesh;}
}

         这个例子里面使用Mesh绘制了一个圆形线条,注意这两行语句:

mesh.SetIndices(indexList.ToArray(), MeshTopology.Lines, 0);
mesh.SetIndices(indices, MeshTopology.Quads, 0);

相关文章:

  • C++学习笔记----8、掌握类与对象(一)---- 对象中的动态内存分配(5)
  • 1panel申请https/ssl证书自动续期
  • Kafka系列之:安装部署CMAK,CMAK管理大型Kafka集群参数调优
  • 微软Win11 22H2/23H2 九月可选更新KB5043145发布!
  • Mitsuba 渲染基础
  • 如何使用C语言接入Doris数据库
  • 【Linux服务器】git和github交互使用
  • docker pull镜像失败问题解决尝试
  • 极狐GitLab 17.4 重点功能解读【九】
  • 云计算课程作业1
  • TS系列(4):常用类型之类、抽象类和接口
  • Steam黑神话悟空禁止更新进入游戏的解决方案
  • 【开源免费】基于SpringBoot+Vue.JS技术交流分享平台(JAVA毕业设计)
  • 多线程相关内容
  • 图解FTP服务器配置:实体用户方式访问案例
  • [ JavaScript ] 数据结构与算法 —— 链表
  • [rust! #004] [译] Rust 的内置 Traits, 使用场景, 方式, 和原因
  • Android交互
  • IP路由与转发
  • Java-详解HashMap
  • Next.js之基础概念(二)
  • seaborn 安装成功 + ImportError: DLL load failed: 找不到指定的模块 问题解决
  • vuex 学习笔记 01
  • Zsh 开发指南(第十四篇 文件读写)
  • 少走弯路,给Java 1~5 年程序员的建议
  • 十年未变!安全,谁之责?(下)
  • 使用iElevator.js模拟segmentfault的文章标题导航
  • 用简单代码看卷积组块发展
  • 在Docker Swarm上部署Apache Storm:第1部分
  • 7行Python代码的人脸识别
  • ​DB-Engines 11月数据库排名:PostgreSQL坐稳同期涨幅榜冠军宝座
  • ​如何使用ArcGIS Pro制作渐变河流效果
  • ​无人机石油管道巡检方案新亮点:灵活准确又高效
  • #vue3 实现前端下载excel文件模板功能
  • (03)光刻——半导体电路的绘制
  • (07)Hive——窗口函数详解
  • (12)Linux 常见的三种进程状态
  • (Spark3.2.0)Spark SQL 初探: 使用大数据分析2000万KF数据
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (附源码)计算机毕业设计ssm电影分享网站
  • (回溯) LeetCode 46. 全排列
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (四)React组件、useState、组件样式
  • (杂交版)植物大战僵尸
  • .apk 成为历史!
  • .NET 8.0 中有哪些新的变化?
  • .Net Core 微服务之Consul(三)-KV存储分布式锁
  • .NET/C# 的字符串暂存池
  • .net生成的类,跨工程调用显示注释
  • :“Failed to access IIS metabase”解决方法
  • @Resource和@Autowired的区别
  • [ vulhub漏洞复现篇 ] ECShop 2.x / 3.x SQL注入/远程执行代码漏洞 xianzhi-2017-02-82239600
  • [ 常用工具篇 ] AntSword 蚁剑安装及使用详解
  • [\u4e00-\u9fa5] //匹配中文字符