Unity3d Mesh篇(一)— 创建简单三角面

文章目录

  • 前言
  • 一、Mesh组成
  • 二、使用步骤
  • 三、效果
  • 四、总结


前言

Mesh(网格)是一种常用的3D图形表示方法,它由顶点,法线,UV 坐标,和三角形等组成。您可以使用 Mesh 类的方法来创建或修改网格,也可以使用 MeshFilter 组件或 MeshRenderer 组件来显示网格。UnityMesh 可以用于制作各种 3D 场景和效果,例如地形,水面,粒子,布料等。


一、Mesh组成

顶点(vertex):顶点是物体表面上的点,用 Vector3 类型表示它们在局部空间中的位置。
法线(normal):法线是顶点的方向,用 Vector3 类型表示它们在局部空间中的单位向量。
UV 坐标(uv):UV 坐标是顶点的纹理坐标,用 Vector2 类型表示它们在纹理图像中的位置。
三角形(triangle):三角形是物体表面上的面,用整数数组表示它们由哪些顶点组成。每个三角形由三个顶点索引构成,顶点索引是顶点数组中的位置。

二、使用步骤

首先,我们需要在 Unity 中创建一个空的 3D 项目。然后,我们需要在场景中添加一个空的游戏对象,我们可以把它命名为 “Triangle” ,这将是我们的网格生成器。为了让我们的网格能够显示在屏幕上,我们还需要给它添加一些组件,分别是:

MeshFilter:这个组件允许我们上传和存储我们的网格数据,以供 Unity 的图形 API 渲染。
MeshRenderer:这个组件负责渲染我们的网格,我们给它指定一个材质来改变网格的颜色和外观。
C# 脚本:这个组件是我们编写网格生成逻辑的地方,我们把它命名为 “Test”

下图是我们的游戏对象在inspector面板中的样子:
在这里插入图片描述

首先,我们需要在游戏对象上添加MeshFilter组件和MeshRenderer组件。这可以通过RequireComponent属性来实现,它会在挂载脚本的时候,自动添加指定的组件。

//挂载脚本的时候,自动添加下面的组件
[RequireComponent(typeof(MeshFilter)),RequireComponent(typeof(MeshRenderer))]

然后,我们需要在Start方法中创建一个Mesh对象,并获取MeshFilter组件的引用。我们可以使用new关键字来实例化一个Mesh对象,并赋值给一个变量。我们还可以给mesh一个名字,方便在编辑器中识别。我们可以使用GetComponent方法来获取MeshFilter组件的引用,并将mesh赋值给它的mesh属性。

void Start()
{//创建一个Mesh对象Mesh mesh = new Mesh();//获取MeshFilter组件的引用var meshFilter = GetComponent<MeshFilter>();//将mesh赋值给MeshFilter组件的mesh属性meshFilter.mesh = mesh;//给mesh一个名字mesh.name = "Mesh01";
}

接下来,我们需要设置mesh的顶点和三角形。顶点是一个Vector3数组,表示三维空间中的点的坐标。三角形是一个int数组,表示顶点数组中的索引,每三个索引构成一个三角形。我们可以使用mesh的vertices属性和triangles属性来设置这些信息。

private Vector3[] GetVertexs()
{//返回一个包含三个顶点的数组return new[]{new Vector3(0, 0, 0), //第一个顶点,索引为0new Vector3(1, 0, 0), //第二个顶点,索引为1new Vector3(1, 1, 0), //第三个顶点,索引为2};
}private int[] GetTriangles()
{//返回一个包含三个索引的数组return new[]{0,1,2 //构成一个三角形的索引};
}void Start()
{//设置mesh的顶点mesh.vertices = GetVertexs();//设置mesh的三角形mesh.triangles = GetTriangles();
}

这样,我们就完成了一个三角面的mesh的创建。我们可以在场景中添加一个空的游戏对象,并将Test脚本挂载到上面。然后,我们可以在Game视图中看到一个紫色的三角形,这就是我们创建的mesh。

如果我们想要给mesh添加一些颜色,我们还需要设置mesh的材质(material)。材质是一个Material对象,它定义了mesh的外观,如颜色、光照、纹理等。我们可以使用MeshRenderer组件的material属性来设置这些信息。

void Start()
{//获取MeshRenderer组件的引用var meshRenderer = GetComponent<MeshRenderer>();//创建一个Material对象Material material = new Material(Shader.Find("Standard"));//设置材质的颜色为红色material.color = Color.red;//将材质赋值给MeshRenderer组件的material属性meshRenderer.material = material;
}

这样,我们就给mesh添加了一些颜色。我们可以在Game视图中看到一个红色的三角形,这就是我们创建的mesh。

三、效果

在这里插入图片描述

四、总结

你已经学会了如何在 Unity 中简单地创建一个三角面。这是一个很基础的教程,但是它涉及了一些重要的概念,比如网格,顶点,三角形,索引,坐标等。你可以尝试修改你的代码,创建不同的形状,比如四边形,五边形,甚至更复杂的多边形。你也可以给你的网格添加一些颜色,纹理,光照等效果,让它更加美观

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

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

相关文章

k8s学习(RKE+k8s+rancher2.x)成长系列之简配版环境搭建(三)

3.19.切换RKE用户&#xff0c;并做免密登录&#xff08;三台机器相互免密&#xff09; su rke cd~ ssh-keygen[rkemaster.ssh]$ssh-copy-id rkeslaver2 [rkemaster.ssh]$ssh-copy-id rkeslaver1 [rkemaster.ssh]$ssh-copy-id rkemaster3.20.搭建RKE集群 为了方便理解&#…

office的excel中使用,告诉我详细的解决方案,如何变成转化为金额格式

在Office的Excel中&#xff0c;如果你想将名为"MEREFIELD"的公式结果转换为金额格式&#xff0c;你可以遵循以下详细步骤来实现&#xff1a; 书写MEREFIELD公式&#xff1a; 首先&#xff0c;在Excel中输入或确认你的MEREFIELD公式。例如&#xff0c;假设这个公式是用…

基于STL的演讲比赛流程管理系统(个人学习笔记黑马学习)

1、演讲比赛程序需求 1.1比赛规则 学校举行一场演讲比赛&#xff0c;共有12个人参加。比赛共两轮&#xff0c;第一轮为淘汰赛&#xff0c;第二轮为决赛。每名选手都有对应的编号&#xff0c;如 10001~10012比赛方式:分组比赛&#xff0c;每组6个人;第一轮分为两个小组&#xff…

SpringBoot 条件注解一览无余

文章目录 条件注解是什么有哪些条件注解类条件注解Bean条件注解属性条件注解资源条件注解web应用条件注解SpEL( Spring Expression Language )表达式条件注解其他条件注解 总结 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍…

Flutter使用问题整理

前言 写这篇文章是为了记录平时在使用flutter时遇到的问题&#xff0c;及解决方案&#xff0c;方便再次遇到时能够快速解决。 问题及解决 问题1 真机运行项目&#xff0c;在构建时提示 Running Gradle task assembleDebug... 41.8s [!] App r…

OpenCV中inRange函数

在OpenCV中&#xff0c;inRange函数用于根据颜色范围从图像中提取特定的颜色区域。这个函数检查输入图像中的每个像素&#xff0c;如果像素值位于指定的范围内&#xff0c;则在输出图像&#xff08;或掩码&#xff09;中对应位置的像素被设置为白色&#xff08;或者说是255&…

消息队列-RabbitMQ:MQ作用分类、RabbitMQ核心概念及消息生产消费调试

1、MQ 的相关概念 1&#xff09;什么是 MQ MQ (message queue)&#xff0c;从字面意思上看&#xff0c;本质是个队列&#xff0c;FIFO 先入先出&#xff0c;只不过队列中存放的内容是 message 而已&#xff0c;还是一种跨进程的通信机制&#xff0c;用于上下游传递消息。在互…

Vue报错,xxx is defined #变量未定义

vue.js:5129 [Vue warn]: Error in v-on handler: "ReferenceError: count is not defined" 浏览器将这个变量 当做全局变量了&#xff0c;事实上它只是实例中的变量 加上this指定&#xff0c;是vue实例中的变量

Itext生成pdf文件,html转pdf时中文一直显示不出来

之前使用freemark模板渲染ftl页面,转出的pdf中&#xff0c;css2有些样式好像不支持&#xff0c;比较常用的居中样式都没有效果&#xff0c;text-align:center 改造成使用html页面来转pdf&#xff0c;css2的样式可以生效,itext是不支持css3的弹性布局的ITextRenderer pdfRendere…

AI之Sora:Sora(文本指令生成视频的里程碑模型)的简介(能力/安全性/技术细节)、使用方法、案例应用之详细攻略

AI之Sora&#xff1a;Sora(文本指令生成视频的里程碑模型)的简介(能力/安全性/技术细节)、使用方法、案例应用之详细攻略 导读&#xff1a;Sora 是OpenAI研发的一个可以根据文字描述生成视频的AI模型。它的主要特性、功能以及OpenAI在安全和应用方面的策略的核心要点如下所示&a…

分布式锁的应用场景及实现

文章目录 分布式锁的应用场景及实现1. 应用场景2. 分布式锁原理3. 分布式锁的实现3.1 基于数据库 分布式锁的应用场景及实现 1. 应用场景 电商网站在进行秒杀、特价等大促活动时&#xff0c;面临访问量激增和高并发的挑战。由于活动商品通常是有限库存的&#xff0c;为了避免…

MySQL 基础知识(十)之 MySQL 架构

目录 1 MySQL 架构说明 2 连接层 3 核心业务层 3.1 查询缓存 3.2 解析器 3.3 优化器 3.4 执行器 4 存储引擎层 5 参考文档 1 MySQL 架构说明 下图是 MySQL 5.7 及其之前版本的逻辑架构示意图 MySQL 架构大致可分为以下三层&#xff1a; 连接层&#xff1a;负责跟客户…

[oeasy]python0007_ print函数_字符串_display_电传打字机_程序员的浪漫

你好世界 &#x1f94a; 回忆上次内容 上次 想输出 Hello world&#xff01;据说是程序猿的浪漫 键盘按键作用↑上一条指令↓下一条指令←光标 向左移动 一格→光标 向右移动 一格ctrl a光标 移动到开头ctrl e光标 移动到结尾 了解到 字符串 就是 给一串字符 两边加引号…

19. 【Linux教程】nano 编辑器

前面小节介绍了如何使用 vim 编辑器&#xff0c;相比于 vim 编辑器&#xff0c;nano 编辑器就比较简单了。nano 是 UNIX 系统中的一个文本编辑器&#xff0c;大部分 Linux 发行版本默认都安装了 nano 文本编辑器。 和 vim 编辑器相比&#xff0c;nano 编辑器就没有那么强大&am…

2024.2.19 阿里云Flink

一 、Flink基本介绍 Spark底层是微批处理 , Flink底层则是实时流计算 流式计算特点: 数据是源源不断产生,两大问题,乱序和延迟 Stateful:有状态 Flink的三个部分 Source:Transactions , logs ,iot ,clicks Transformation: 事件驱动 , ETL , 批处理 Sink : 输出 HDFS ,Kaf…

Keil软件生成bin文件

首先需要在keil的魔法棒里将运行脚本加上 加上脚本后&#xff0c;还需要将编译后的文件存放于什么位置 C:\Keil_v5\ARM\ARMCC\bin\fromelf.exe --bin -o "$LL.bin" "#L" 到这里就可以了

工业智能:基于LSTM的电解槽出铝量预测与可视化系统设计与实现

工业智能&#xff1a;基于LSTM的电解槽出铝量预测与可视化系统设计与实现 工业智能&#xff1a;基于LSTM的电解槽出铝量预测与可视化系统设计与实现项目背景与意义技术与功能介绍系统设计与实现结语 工业智能&#xff1a;基于LSTM的电解槽出铝量预测与可视化系统设计与实现 在…

Mac清理系统垃圾软件CleanMyMac X2025免费版本下载

嘿&#xff0c;Mac用户们&#xff0c;你是否经常感觉你的Mac就像是在背着一个沉重的包袱在跑步&#xff1f;是的&#xff0c;我在说那些堆积如山的系统垃圾。清理这些垃圾不仅可以让你的Mac跑得更快&#xff0c;还能让它“呼吸”更畅快。今天&#xff0c;让我们一起来探索如何M…

一加手机怎么录屏?这个方法请你收好!

“我最近刚换了一加手机&#xff0c;本以为录屏功能会像之前用的手机一样方便找到&#xff0c;但翻遍了设置菜单也没找到。我知道一加手机是支持录屏功能的&#xff0c;所以想请教一下&#xff0c;一加手机的录屏功能在哪里&#xff0c;应该怎么使用&#xff1f;” 随着智能手…

Uniapp-开发小程序

文章目录 前言一、npm run xxx —— cross-env: Permission denied解决方法&#xff08;亲测有效&#xff09;其他解决方法&#xff1a; 二、macOS 微信开发者工具选择uniapp 用 vscode 开发 总结 前言 macOS下 uniapp 开发小程序。 一、npm run xxx —— cross-env: Permissi…