Three.js 打造酷炫的三角形

news2025/1/20 10:49:33

在前一章中,我们通过 BufferGeometry 创建了一个正方形,本节我们利用 BufferGeometry 打造一簇酷炫的三角形,最终的效果如下图所示:

从效果图中可以发现,每一个三角形的位置、大小、颜色都是随机的。

// 共有50个三角形
for (let i = 0; i < 50; i++) {// 每一个三角形,需要三个顶点,每个顶点需要3个值const geometry = new THREE.BufferGeometry();const vertices = new Float32Array(9);for (let j = 0; j < 9; j++) {// 顶点的位置在 -5 ~ 5 之间vertices[j] = Math.random() * 10 - 5;}geometry.setAttribute("position", new THREE.BufferAttribute(vertices, 3));const color = new THREE.Color(Math.random(), Math.random(), Math.random());const material = new THREE.MeshBasicMaterial({color,});const mesh = new THREE.Mesh(geometry, material);scene.add(mesh);
} 

代码并不复杂,创建50个三角形,每个三角形有三个顶点,每个顶点由 x 、y、z 三个值组成,所以 Float32Array 中需要存储9个值,而每个值都在 -5 ~ 5 之间。实现后的效果图如下所示:

最后我们为 MeshBasicMaterial 添加一下透明效果即可,如文档所示,我们不仅需要设置 opacity,还需要将材质的 transparent 设置成 true。

所以我们将 material 的创建改成下述代码:

const material = new THREE.MeshBasicMaterial({color,transparent: true,opacity: 0.5,
}); 

至此,我们的酷炫的一簇三角形已经完成,但是仍然存在一些问题——浏览器尺寸变化时画面并不会自适应,下面我们就来解决这个问题。

首先我们要监听 windowresize 事件,并在其中更新画布的大小

// 监听画面变化,更新渲染渲染画面
window.addEventListener("resize", () => {// 更新渲染器renderer.setSize(window.innerWidth, window.innerHeight);
}) 

但是运行后会发现,虽然画布大小发生了变化,但同时绘制的图形也被压缩了

我们要更新摄像头的宽高比,同时,我们还需要调用 updateProjectionMatrix() 方法用于更新摄像机投影矩阵。在 resize 事件中继续添加下述代码:

// 更新摄像头
camera.aspect = window.innerWidth / window.innerHeight;
// 更新摄像机的投影矩阵,在任何参数被改变以后必须被调用。
camera.updateProjectionMatrix(); 

如此便完成了我们的诉求,当浏览器尺寸发生变化时,渲染的画面也随之更新。

最后

最近还整理一份JavaScript与ES的笔记,一共25个重要的知识点,对每个知识点都进行了讲解和分析。能帮你快速掌握JavaScript与ES的相关知识,提升工作效率。



有需要的小伙伴,可以点击下方卡片领取,无偿分享

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

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

相关文章

医疗影像工具LEADTOOLS 入门教程: 检测和提取机读旅行证件 - 控制台 C#

LEADTOOLS 是一个综合工具包的集合&#xff0c;用于将识别、文档、医疗、成像和多媒体技术整合到桌面、服务器、平板电脑、网络和移动解决方案中&#xff0c;是一项企业级文档自动化解决方案&#xff0c;有捕捉&#xff0c;OCR&#xff0c;OMR&#xff0c;表单识别和处理&#…

专注分布式架构 莱商银行的数字化转型实践

本文刊登于《金融电子化》杂志 2022 年 12 月下&#xff0c;作者魏汝浩为莱商银行首席信息官。2021 年 12 月 29 日&#xff0c;中国人民银行印发《金融科技发展规划&#xff08;2022—2025 年&#xff09;》&#xff08;银发〔2021〕335 号&#xff09;&#xff0c;提出新时期…

分享166个ASP源码,总有一款适合您

166个ASP源码下载链接&#xff1a;https://pan.baidu.com/s/19W7FmY9nADL1Rge8e5uqiQ?pwdskhh 提取码&#xff1a;skhh import os import shutil import time from time import sleepimport requests from bs4 import BeautifulSoup from docx import Document from docx.sh…

Shader从入门到放弃(四) —— 绘制闪耀星际

前言 经过3个章节的学习&#xff0c;相信大家对shader编程也逐渐的有了一些感觉&#xff0c;所以这次我们玩个“大”的&#xff01;。 今天的学习内容是绘制“闪耀星际”&#xff0c;正如歌中唱的那样&#xff1a; 星际闪耀光影&#xff0c;落入你的眼睛&#xff0c;如迷人的…

Dubbo泛化调用

Dubbo泛化调用 1. 场景 场景一&#xff1a;我们要搭建一个统一的测试平台&#xff0c;可以让各个业务方在测试平台中通过输入接口、分组名、方法名以及参数值&#xff0c;在线测试自己发布的 RPC 服务。这时我们就有一个问题要解决&#xff0c;我们搭建统一的测试平台实际上是…

【论文速递】CVPR2022 - 泛化的小样本语义分割

【论文速递】CVPR2022 - 泛化的小样本语义分割 【论文原文】&#xff1a;Generalized Few-shot Semantic Segmentation 获取地址&#xff1a;https://openaccess.thecvf.com/content/CVPR2022/papers/Tian_Generalized_Few-Shot_Semantic_Segmentation_CVPR_2022_paper.pdf博…

【ROS2 入门】Jeston TX1 JetPack_4.6.3环境 ubuntu 18.04 ROS2 安装

大家好&#xff0c;我是虎哥&#xff0c;从今天开始&#xff0c;我将花一段时间&#xff0c;开始将自己从ROS1切换到ROS2&#xff0c;在上一篇中&#xff0c;我们再虚拟机环境中安装了 ROS2 eloquent版本&#xff0c;并完成了初步的验证&#xff0c;但是做为一个偏硬件的博主&a…

nginx禁止外网访问

1、安装 libmaxminddb 库 apt updateapt install libmaxminddb0 libmaxminddb-dev mmdb-bin上面安装的软件包是&#xff1a; libmaxminddb0 libmaxminddb-dev 是MaxMind地理定位数据库mmdb-bin – 二进制。 从命令行调用的程序。 使用此命令手动定位 IP 安装参考 2、下载geoi…

node学习笔记

阶段一 1 初始Node.js javascript 运行环境 1.2 Node.js中的javacript 运行环境 1.3 Node.js环境安装 百度 1.4 node.js 执行javaScript 代码 2 fs文件系统模块 2.1 fs文件系统模块概念 导入文件系统模块&#xff1a; const fs require(fs)fs.readFile() // 1 导入fs文件…

【进阶C语言】通讯录(后期会升级)

文章目录一.基本框架与功能二.头文件的详细内容三.函数的实现1.打印菜单2.初始化通讯录3.添加联系人信息4.打印联系人信息5.查找名字6.删除联系人信息7.查找联系人8.修改联系人信息9.排序联系人&#xff08;按照名字&#xff09;四.总结1.test.c2.contact.c3.contact.h一.基本框…

智能电风扇(stm32f103c8t6)(直流电机,热敏传感器)(TIM,ADC)

前言 我的毕业论文的课题 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一、热敏传感器计算温度&#xff08;ADC采样单通道&#xff09; #include "stm32f10x.h" // Device header#define T25 298.15 #define B 3…

看完这篇 教你玩转渗透测试靶机vulnhub——MONEYBOX: 1

Vulnhub靶机MONEYBOX: 1渗透测试详解Vulnhub靶机介绍&#xff1a;Vulnhub靶机下载&#xff1a;Vulnhub靶机安装&#xff1a;Vulnhub靶机漏洞详解&#xff1a;①&#xff1a;信息收集&#xff1a;②&#xff1a;FTP匿名登入&#xff1a;③&#xff1a;SSH暴力破解④&#xff1a;…

Java操作Word模板产生全新内容Word

1. spire.doc的jar引用 首先我们需要用到国产word处理工具jar包spire.doc&#xff0c;可以通过maven仓库寻找&#xff0c;然后在pom文件中直接引用。 此处需要注意&#xff0c;我们需要使用的是spire.doc.free&#xff08;免费版的&#xff09;&#xff0c;切勿使用spire.doc&a…

c++ - 第23节 - C++的类型转换

1.C语言中的类型转换 在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#xff0c;或者返回值类型与接收返回值类型不一致时&#xff0c;就需要发生类型转化&#xff0c;C语言中总共有两种形式的类型转换&#xff1a;隐式类型转换和…

业务安全情报 | 数十万元的数据报告,竟被50元批量转售

近期监测到某咨询公司针数据报告大量泄漏事件&#xff0c;该机构历年的数据报告以及近期更新的针对VIP会员的付费报告均在电商等渠道可以低价获取。 BSL-2022-a3c28号情报文件显示黑灰产通过作弊方式获取查看、下载权限&#xff0c;绕过限制将报告数据大量下载&#xff0c;并通…

javaEE初阶 — 认识文件

文章目录认识文件1. 树型结构组织和目录2. 文件路径&#xff08;Path&#xff09;2.1 绝对路径2.2 相对路径3. 文件的类型认识文件 文件分为 狭义 和 广义 两种 狭义的文件&#xff1a;指的是硬盘上的 文件 和 目录 广义的文件&#xff1a; 泛指计算机中很多的软硬件资源。操…

2022(一等奖)D926刘家峡库区潜在滑坡InSAR识别与分析

作品介绍 1 应用背景 滑坡是普遍存在于世界各地山区的主要灾害之一&#xff0c;严重威胁着人类的生命财产安全和自然环境。滑坡不但会直接破坏人类生命财产安全和建筑物&#xff0c;而且还会造成堰塞湖等次生灾害&#xff0c;进而对人类的生命财产安全和基础设施等造成二次破坏…

暴力破解 SSH

Kali 的 MSF 终端&#xff0c;对渗透目标主机 的 SSH 服务进行暴力破解。 破解的是否成功取决于字典和目标是否使用弱密码。 一&#xff0c;实验环境 分别是攻击机和靶机&#xff08;也可是其他目标服务器&#xff09; 二、利用 SSH 弱密码进行暴力破解 暴力破解最重要的要…

100 道 Linux 笔试题,能拿 80 分就算大神!

本套笔试题共100题&#xff0c;每题1分&#xff0c;共100分。&#xff08;参考答案在文章末尾&#xff09; 1.cron 后台常驻程序 (daemon) 用于&#xff1a; A. 负责文件在网络中的共享 B. 管理打印子系统 C. 跟踪管理系统信息和错误 D. 管理系统日常任务的调度 2.在大多数Li…

如何使用无标签数据进行预训练?

一、直观解释 简单来说就是“造目标”。也即人为地去构造一些子任务&#xff08;论文里的protext task&#xff09;&#xff0c;或者利用一些最基本的公理性常识&#xff0c;去设计“类似监督”的任务。所不同的是&#xff0c;我们引入的“类似监督”的任务通常是用来完成表征…