4.three.js网格模型介绍和绘制基础点、线、面

4.three.js网格模型介绍和绘制基础点、线、面

1、计算机中3D世界的组成

在计算机世界里,3D世界是由点组成,两个点能够组成一条直线,三个不在一条直线上的点就能够组成一个三角形面,无数三角形面就能够组成各种形状的物体,如下图:

在这里插入图片描述

我们通常把这种网格模型叫做Mesh模型。给物体贴上皮肤,或者专业点就叫做纹理,那么这个物体就活灵活现了。最后无数的物体就组成了我们的3D世界。

2.Three.js中绘制点

在三维空间中的某一个点可以用一个坐标点来表示。一个坐标点由x,y,z三个分量构成。

空间几何中,点可以用一个向量来表示,在Three.js中也是用一个向量来表示的,代码如下所示:

THREE.Vector3 = function ( x, y, z ) {this.x = x || 0;
this.y = y || 0;
this.z = z || 0;};

在Three.js中我们可以这样载入一个点:

//创建一个顶点
let p1 = new THREE.Vector3(10, 0, 0);//创建几何体对象
let geometry = new THREE.Geometry();
// 顶点添加到Geometry的顶点数组vertices中
geometry.vertices.push(p1);
// 创建材质:必须使用对应点的材质,size为点的大小
let  material = new THREE.PointsMaterial( {color: 'red', size:20} );//创建网格模型(line)
let  mesh = new THREE.Points( geometry, material );//加入到scene中scene.add( mesh );

geometry 对象说明:

THREE.Geometry是所有几何体的基类,它有几个重要的属性:
vertices : 数组,保存该几何体下所有顶点(Vector3对象)
colors : 数组,保存该几何体下所有顶点的颜色信息(Color对象)
faces : 数组,保存该几何体下所有面信息(Face3对象)

3.Three.js中绘制线

在Three.js中我们可以这样载入一条线:

 //创建两个顶点let p1 = new THREE.Vector3(10, 0, 0);let p2 = new THREE.Vector3(100, 0, 0);//创建几何体对象
let geometry = new THREE.Geometry();
// 顶点添加到Geometry的顶点数组vertices中
geometry.vertices.push(p1, p2);
// 创建材质:必须使用对应线的材质
let material = new THREE.LineBasicMaterial({color: 0xffff00,linewidth: 100,linecap: "round", //ignored by WebGLRendererlinejoin: "round", //ignored by WebGLRenderer
});//创建网格模型(line)
let mesh = new THREE.Line(geometry, material);
scene.add(mesh);

3.Three.js中绘制面(自定义顶点的面)

在Three.js中我们可以这样载入一个面:

//创建顶点let p0 = new THREE.Vector3(0, 0, 0);let p1 = new THREE.Vector3(100, 0, 0);let p2 = new THREE.Vector3(0, 0, 100);let p3 = new THREE.Vector3(0, 0, 300);//创建几何体对象let geometry = new THREE.Geometry();// 顶点添加到Geometry的顶点数组vertices中geometry.vertices.push(p0,p1,p2, p3);//创建面let face1 = new THREE.Face3(0, 1, 3);//设置这个面的法向量face1.normal = new THREE.Vector3( 0, 0, -1 );//设置各个顶点对应颜色face1.vertexColors = [new THREE.Color(0xFF0000),new THREE.Color(0x00FF00),new THREE.Color(0x0000FF),];geometry.faces.push(face1);//设置网格材质,这里设置为Lambert材质为一种不发光材质let material = new THREE.MeshLambertMaterial({vertexColors : THREE.VertexColors,side: THREE.DoubleSide});//创建网格模型(line)let mesh = new THREE.Mesh(geometry, material);scene.add(mesh); 

视频演示地址:https://www.bilibili.com/video/BV1fBy8YeEDb/

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Linux基础项目开发day05:量产工具——页面系统

文章目录 一、数据结构抽象page_manager.h 二、页面管理器page_manager.c 三、单元测试1、main.page.c2、page_test.c3、Makefile修改3.1、unittest中的Makefile3.2、page中的Makefile 四、上机实验 前言 前面实现了显示、输入、文字、UI系统,现在我们就来实现页面的…

Axure树形菜单展开与折叠

亲爱的小伙伴,在您浏览之前,烦请关注一下,在此深表感谢! 课程主题:Axure树形菜单展开与折叠 主要内容:树形菜单制作——层级关系——隐藏与显示——值的变化——多层交互 应用场景:关系树、菜…

Python学习的自我理解和想法(15)

学的是b站的课程(千锋教育),跟老师写程序,不是自创的代码! 今天是学Python的第15天,从今天开始,每天一到两个常用模块,更完恢复到原来的,开学了,时间不多&am…

滚雪球学Redis[9.1讲]:Redis的常见问题与最佳实践

全文目录: 前言1. Redis的常见问题排查常见错误信息与解决方案性能瓶颈的识别与处理数据一致性问题的排查 2. Redis的最佳实践Redis使用中的通用原则典型业务场景中的最佳实践如何避免Redis中的反模式 小结下期预告 前言 在上一章【第八章:Redis的扩展与…

Java 直接获取 pom.xml 配置的属性值

Java 直接获取 pom.xml 配置的属性值 1.需求描述2.代码示例3.结果演示 系统:Win10 JDK:1.8.0_351 IDEA:2022.3.3 1.需求描述 在开发一个 SpringBoot 项目的时候,需要从 pom.xml 中获取配置的 artifactId,name&#xf…

vscode配置ssh远程连接服务器

注意:重启软件或重启电脑,解决很多问题 一. vscode配置ssh vscode通过ssh连接服务器(吐血总结)_vscode ssh-CSDN博客 二. VScode无法远程连接主机问题 VSCode远程连接服务器报错:Could not establish connection to…

paddleOcr记录

情况1:默认不需要标注电能表样本、训练电能表OCR模型,需调用PaddleOCR出识别字符,对识别信息进行提取 01 – >> test01.py 情况2:需要从无到有标注OCR样本,或已有样本及标签文件,需训练电能表OCR模型…

Redis技术指南:数据类型、事务处理与过期键管理

什么是redis? Redis(Remote Dictionary Server,远程字典服务)是一个开源的、基于键值对的内存数据结构存储系统,可以用作数据库、缓存和消息中间件。Redis支持多种数据结构,如字符串(strings&am…

HCIP-HarmonyOS Application Developer 习题(十六)

(判断)1、HiLink通过分布式软总线的方式连接所有设备,强能力设备可对弱能力设备进行设备虚拟化,将弱设备当做本机设备直接调用。 答案:错误 分析:HiLink 主要针对的是应用开发者与第三方设备开发者&#xf…

K14836 加密通话(call)

题目描述 杰克船长担心船上存在其他海盗船的间谍,于是和他的心腹们设计了一种加密通话方式,其中对数字加密的方式是这样的:如果这个数字是1222334111,可看做1个1,3个2,2个3,1个4,3个1,那么会被加密,1132231431&#x…

力扣 中等 143.重排链表

文章目录 题目介绍题解 题目介绍 题解 class Solution {public void reorderList(ListNode head) {ListNode mid middleNode(head);ListNode head2 reverseList(mid);while (head2.next ! null) {ListNode nxt head.next;ListNode nxt2 head2.next;head.next head2;head2.…

Linux-正则表达式

正则表达式 定义DRE模式-纯文本/特殊字符 定义DRE模式-锚字符/点号字符 定义DRE模式-字符组/排除型字符组 定义DRE模式-区间 定义DRE模式-特殊字符组 定义DRE模式-星号 扩展正则表达式-问号 扩展正则表达式-加号 扩展正则表达式-使用花括号 扩展正则表达式-管道符号/表达式分组…

如何通过CDN优化网站服务器访问速度?

CDN,即内容分发网络(Content Delivery Network),在现代互联网中起着重要作用。它可以显著提升网站服务器的访问速度。以下是CDN在加速网站访问方面的主要优势及其工作原理。 1. 全球分布的服务器节点 CDN通过在全球范围内布设多个…

【Router】路由器中NAT、NAPT、NPT是什么?

参考链接 NAT vs. NAPT: What’s the Difference? IPv6 Network Prefix Translation (NPt) | pfSense Documentation (netgate.com) 趣谈NAT/NAPT的原理,这篇不可不读! - 知乎 (zhihu.com) NAT (Network Address Translation) NAT说明 NAT&#x…

《YOLO 标注工具全览》

《YOLO 标注工具全览》 一、YOLO 标注工具的重要性二、常见的 YOLO 标注工具介绍(一)LabelImg(二)Yolo_Label(三)在线标注工具 Make Sense(四)Ybat - YOLO BBox Annotation Tool&…

成都睿明智科技有限公司电商服务可靠不?

在这个短视频风起云涌的时代,抖音不仅成为了人们娱乐消遣的首选平台,更是众多商家竞相追逐的电商新蓝海。成都睿明智科技有限公司,作为抖音电商服务领域的佼佼者,正以其独到的洞察力和专业的服务,助力无数品牌在这片沃…

微信小程序:miniprogram-ci自动打包工具使用介绍以及支持配置环境变量、jekins打包、taro、uni-app三方工具

微信小程序:miniprogram-ci自动打包工具使用介绍以及支持配置环境变量、jekins打包、taro、uni-app三方工具 背景介绍 一直都是本地电脑运行微信开发者工具打包上传。多项目中新老版本对node版本要求不一致,老是切来切去。而且同一个人开发上传需要打包…

pandas-使用技巧

pandas-使用技巧 简单技巧 仅个人笔记使用,感谢点赞关注 简单技巧 pd.to_dict():Dataframe格式数据转字典数据pd.dropna():去nan值& | ~:pd逻辑运算符pd.isnan():判断是否为nan值pd.concat:多个pd拼接…

李宏毅机器学习2022-HW7-BERT-Question Answering

文章目录 TaskBaselineMediumStrongBoss Code Link Task HW7的任务是通过BERT完成Question Answering。 数据预处理流程梳理 数据解压后包含3个json文件:hw7_train.json, hw7_dev.json, hw7_test.json。 DRCD: 台達閱讀理解資料集 Delta Reading Comprehension …

8.扩散模型的未来---GPT及大模型(3)完结

涌现能力 在自然语言处理领域中,涌现能力(EmergentAbility)是指在训练模型时,模型可以自主地学习到新的任务或功能。换句话说,涌现能力是指模型具有自学习的能力,可以在没有额外训练数据的情况下,自主地实现新的任务或功能。涌现能力…