unity中使用代码接绘制三维模型

news2024/10/7 14:30:56

一 模型的构成

在三维世界中,绘制一个模型并不是什么很复杂的问题。只要知道了基本原理一切需求便迎刃而解。
如下图所示,任何模型都是由点线面构成的,而面的最小单位是三角形。
在这里插入图片描述
任何一个多边形的面,都是由多个三角形构成的。比如一个四边形,就是由ab两个三角形构成的。
在这里插入图片描述
构成一个正方形的两个三角形,可以由四个点构成,也可以由六个点构成。下图就是由四个点构成的正方形,两个三角形分别是abc和adb。
在这里插入图片描述
一个三角形,由三个点组成。在计算机渲染图形的时候,会根据三个点的位置来对他们包围的图形区域进行补间操作,补间出来的部分就是我们看到的面。构成三角形的点叫顶点(vertex),而决定顶点顺序的(面的正反朝向)叫做索引(indect)。在unity中,只需要顶点信息和索引信息就可以完成建模。
在这里插入图片描述

二 关于建模的关键字

vertex / point :顶点。顶点相当于模型的骨架,顶点决定模型的具体形状,所有构成面的三角形都是根据点来生成的。所以顶点是基础,是核心,是根本。
face:面。由任意三个顶点构成的三角形,就是最基础的面。任何复杂的多边形都是由无数个三角形构成的面所组成的。
line:线。两点之间的直线。
indect:索引。我们已经有了一个模型的顶点,想要画出一个三角形,必须要知道想要用到哪几个顶点,以及这些顶点的顺序。所以保存面的构成信息的集合就叫索引。

在这里插入图片描述
例如上面这个正方形的面,他的顶点信息由abcd构成,而他的索引信息是:acbabd。
从这个索引信息我们可以看出:
1,你可能会发现这个集合是由acb,abd组成的,也就是说索引是由每三个一组的顶点编号组成的,索引的总数一定是可以被3整除的。
2,每组三角形索引都是有固定的顺序。逆时针的话渲染出来的面就是正向,顺时针就是逆向。顶点信息是可以乱序的,但索引的顺序不可以乱序。

三 unity绘制模型

通过以上的基础学习,我们知道了模型的渲染原理和结构成分,接下来我们试着用unity通过顶点信息绘制一个模型
以下代码 可以在unity场景中绘制一个模型

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class BuildModel: MonoBehaviour
{
	// 该组件用于在场景中渲染mesh,关于模型网格的一切操作都在这里进行
    MeshFilter meshFilter;

    //模型的顶点集合
    List<Vector3> verts = new List<Vector3>();
    //顶点序列
    List<int> indices = new List<int>();

    void Start()
    {
        meshFilter = GetComponent<MeshFilter>();
  
        Generate();
    }
    void Generate()
    {
        ClearMeshData();
        AddMeshData();

        Mesh mesh=new Mesh();
        mesh.vertices = verts.ToArray();
        mesh.triangles = indices.ToArray();
        //计算法线
        mesh.RecalculateNormals();
        //计算物体的边界
        mesh.RecalculateBounds();
        meshFilter.mesh = mesh;

    }

    void ClearMeshData()
    {
        verts.Clear();
        indices.Clear();
    }

    void AddMeshData()
    {
        verts.Add(new Vector3(0, 0, 0));
        verts.Add(new Vector3(0, 1, 0));
        verts.Add(new Vector3(1, 1, 0));
        verts.Add(new Vector3(1, 0, 0));

        verts.Add(new Vector3(1, 0, 0));
        verts.Add(new Vector3(1, 1, 0));
        verts.Add(new Vector3(1, 1, 1));
        verts.Add(new Vector3(1, 0, 1));


        verts.Add(new Vector3(0, 1, 0));
        verts.Add(new Vector3(0, 1, 1));
        verts.Add(new Vector3(1, 1, 1));
        verts.Add(new Vector3(1, 1, 0));


        verts.Add(new Vector3(0, 0, 0));
        verts.Add(new Vector3(1, 0, 0));
        verts.Add(new Vector3(1, 0, 1));
        verts.Add(new Vector3(0, 0, 1));


        verts.Add(new Vector3(0, 0, 1));
        verts.Add(new Vector3(1, 0, 1));
        verts.Add(new Vector3(1, 1, 1));
        verts.Add(new Vector3(0, 1, 1));


        verts.Add(new Vector3(0, 0, 0));
        verts.Add(new Vector3(0, 0, 1));
        verts.Add(new Vector3(0, 1, 1));
        verts.Add(new Vector3(0, 1, 0));


        for (int i = 0; i <= 20; i+=4)
        {
            indices.Add(0 + i);
            indices.Add(1 + i);
            indices.Add(2 + i);
            indices.Add(0 + i);
            indices.Add(2 + i);
            indices.Add(3 + i);

        }
    }
}

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

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

相关文章

Web前端105天-day64-HTML5_CORE

HTML5CORE04 目录 前言 一、复习 二、WebSocket 三、服务器搭建 四、聊天室 五、defineProperty 5.1.初识defineProperty 5.2.配置多个属性 5.3.可配置 5.4.赋值监听 5.5.练习 5.6.计算属性 总结 前言 HTML5CORE04学习开始 一、复习 SVG: 利用HTML的 DOM 来绘制图…

PCB贴片机如何送料?

1.常见的贴片机供料器四种形式 http://www.sz-bjzn.com/1547.html 2.模块化设计SMT贴片机送料器的操作方法 3.淘宝 https://item.taobao.com/item.htm?spma230r.1.14.98.33e41823OZ1zzn&id579043582781&ns1&abbucket20#detail 不错&#xff1a;https://item.tao…

distinct与group by 去重

distinct与group by 去重distinct 特点&#xff1a;group by 特点&#xff1a;总结&#xff1a;mysql中常用去重复数据的方法是使用 distinct 或者group by &#xff0c;以上2种均能实现&#xff0c;但也有不同的地方。distinct 特点&#xff1a; 1、distinct 只能放在查询字段…

重新更新anaconda

更新anaconda问题阐述问题分析打开Anaconda Nvaigator打开文件所在位置复制文件所在路径找到此电脑或者打开设置找到高级系统设置环境变量添加环境变量打开scripts文件修改成功再一次启动感谢观看今天手贱,不小心删掉的anaconda,我想一不做二不休,直接重新重装了,就找到了anaco…

经典SQL语句大全(基础、提升、技巧、数据开发、基本函数)

目录 前言 正文 第一章&#xff1a;基础 第二章&#xff1a;提升 第三章&#xff1a;技巧 第四章&#xff1a;数据开发-经典​​​​​​​ 第五章&#xff1a;SQL Server基本函数 第六章&#xff1a;常识 第七章&#xff1a;SQLServer2000 同步复制技术实现步骤 总结…

juc-4-synchronized原理

目录 1、synchronized 作用于静态方法 总结 ​编辑 案例 静态成员变量 (synchronized锁非静态方法) 案例 静态成员变量 (synchronized锁静态方法 或 直接锁类) 2、监视器锁(monitor) 2.1 synchronized怎么实现的线程安全呢&#xff1f; 3、JDK6 synchronized 的优化 3.1 C…

互联网技术不再是统领,当下正在发生着一场深刻的变革

拥抱实体经济&#xff0c;绝对是当下互联网玩家们的首要选择。无论是头部的互联网企业来讲&#xff0c;还是新生的互联网玩家而言&#xff0c;它们都不约而同地将关注的焦点聚焦在了这样一个方向上。   透过这一点&#xff0c;我们可以非常明显地感受到&#xff0c;一个全新的…

圣诞节,记录前行中跨过的2022

2022年&#xff0c;我人生的第二十四年&#xff0c;是我大学生活的最后一年&#xff0c;是我职场生涯的第一年&#xff0c;这一年从学生到打工人&#xff0c;从实习生到职场员工&#xff0c;变化了许多&#xff0c;做了许多&#xff0c;收获了许多&#xff0c;同时也成长了许多…

m自适应FSK解调系统误码率matlab仿真

目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 FSK信号的解调也有非相干和相干两种&#xff0c;FSK信号可以看作是用两个频率源交替传输得到的&#xff0c;所以FSK的接收机由两个并联的ASK接收机组成。 (1)相干解调 相干解调是利用乘法器&…

Minecraft(我的世界) Fabric 1.19.3 服务器搭建教程

Debian系统使用MCSManager9面板搭建MC Java版MOD服务器的教程&#xff0c;本教程用的Fabric1.19.3服务端&#xff0c;用其他服务端的也可以参考一下。 视频教程&#xff1a;https://www.bilibili.com/video/BV1Zd4y1h7zG/ 我的世界(MC) Fabric 1.19.3 开服教程&#xff0c;新手…

IDEA Git 选项栏各项功能详解

IDEA Git 选项栏各项功能详解 如图所示 Copy Revision Number 顾名思义 拷贝当前版本号 到剪切板 a8e4b86ce9ca01968629504a6e19b4b99d76a853 Create Patch 在 git 日志中选择要创建补丁的commit&#xff0c;右键选择Create Patch...同一个文件在多次commit中都存在&#xff…

DSP-离散时间系统

目录 概念&#xff1a; 累加器(Accumulator)&#xff1a; N点滑动滤波器&#xff1a; 离散时间系统的分类 &#xff1a; 线性系统 Linear System 移不变系统 Shift-Invariant Systems 因果系统 Causal System 稳定系统 Stable System 无源&#xff08;passive&#x…

蚂蚁感冒(第五届蓝桥杯省赛C++A/B组)

目录 题目详细&#xff1a;​编辑 题目思路&#xff1a; 两种情况&#xff1a; 代码详解&#xff1a; 题目详细&#xff1a; 题目思路&#xff1a; 这个题目的关键在于对蚂蚁相遇 的时候情况的看待 两个蚂蚁相遇时候的情况 我们可以看作 他们相互穿过了彼此 假设相遇…

基于CNN的MINIST手写数字识别项目代码以及原理详解

文章目录项目简介项目开发软件环境项目开发硬件环境前言一、数据加载的作用二、Pytorch进行数据加载所需工具2.1 Dataset2.2 Dataloader2.3 Torchvision2.4 Torchtext2.5 加载项目需要使用的库三、加载MINIST数据集3.1 数据集简介3.2 数据预处理3.3 加载数据集四、模型构建五、…

【分布式技术专题】「架构实践于案例分析」总结和盘点目前常用分布式事务特别及问题分析(Seata-终)

分布式事务中间件对⽐与选择 tx-lcnEasyTransactionByteTCCSeata Seata实现分布式事务 我们主要以Seata的分布式事务框架进行介绍分析&#xff0c;相关的并且针对于其三种模式进行分别说明介绍。 搭建Seata Server 前往https://github.com/seata/seata/releases 下载Seata安装…

TCP通信

目录 一.服务端 1.1创建套接字与绑定 1.2监听 1.3服务端获取连接 1.4服务端提供服务 二.客户端 2.1创建套接字 2.2客户端获取连接 2.3客户端发送需求 三.填充命令行参数 3.1客户端 3.2服务端 3.3结果测试 四.线程版本服务端 4.1线程版 4.2线程池版 一.服务端 与上文…

程序员过圣诞 | 用HTML写出绽放的烟花

文章目录一、前言二、创意名三、效果展示四、烟花代码五、总结一、前言 2022年圣诞节到来啦&#xff0c;圣诞节是基督教纪念耶稣诞生的重要节日。亦称耶稣圣诞节、主降生节&#xff0c;天主教亦称耶稣圣诞瞻礼。耶稣诞生的日期&#xff0c;《圣经》并无记载。公元336年罗马教会…

【博客567】http/2 goaway frame 与 grpc graceful restart

http2 goway frame 与 grpc graceful restart 1、http/2 HTTP/2新增特性 二进制分帧(HTTP Frames)多路复用头部压缩服务端推送(server push)等等新特性 二进制分帧(HTTP Frames)是实现一流多用的基础 HTTP/2最革命性的原因就在于这个二进制分帧了&#xff0c;要了解二进制…

Win10 21H2 19044+vs2019 WDK驱动开发,错误 MSB8040缓解Spectre 漏洞的库以及输出SXS.DLL的垃圾信息

错误 MSB8040缓解Spectre 漏洞的库以及输出SXS.DLL的垃圾信息&#xff0c;win7关闭驱动签名、进入驱动测试模式缓解Spectre 漏洞错误的解决windbg狂刷输出SXS.DLL的垃圾信息的解决缓解Spectre 漏洞错误的解决 在工程配置属性&#xff0c;常规&#xff0c;输出目录&#xff0c;…

SSD_学习笔记记录

one-steage VGG16模型的修改 VGG16的模型输出&#xff0c;其中224.。。为特征图的大小。 SSD模型中对VGG网络的修改&#xff1a; SSD模型是对VGG中的第四个卷积块中的最后一个Conv2d进行第一个输出&#xff0c;在这里简称为Conv4-3。以及第五个卷积块中的最后一个Conv2d进行…