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

Three.js 入门(辅助、位移、父子关系、缩放旋转、响应式布局)

本篇主要学习内容 :

  1. 三维坐标系辅助坐标系
  2. 物体位移父子元素
  3. 物体的缩放物体的旋转
  4. 设置响应式画布全屏控制

点赞 + 关注 + 收藏 = 学会了

本文使用 Three.js 的版本:171 基于 Vue3+vite开发调试


1.三维坐标系辅助坐标系

1.1) 导入three和轨道控制器
// 导入threejs
import * as THREE from 'three'
//导入轨道控制器扩展库OrbitControls.js
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'
1.2)实例化轨道控制器和坐标辅助器
// 坐标辅助器 (xyz轴绘制) 5代表辅助线长度
const axesHelper = new THREE.AxesHelper(5)
//添加到场景
scene.add(axesHelper)
1.3)OrbitControls本质上就是改变相机的参数,比如相机的位置属性,改变相机位置也可以改变相机拍照场景中模型的角度,实现模型的360度旋转预览效果,改变透视投影相机距离模型的距离,就可以改变相机能看到的视野范围。
// 轨道控制器 两种方式
const controls = new OrbitControls(camera, document.body)
// 设置相机控件轨道控制器OrbitControls
const controls = new OrbitControls(camera, renderer.domElement);
// 如果OrbitControls改变了相机参数,重新调用渲染器渲染三维场景
controls.addEventListener('change', function () {renderer.render(scene, camera); //执行渲染操作
});//监听鼠标、键盘事件

2.物体位移父子元素

2.1)相机位移动画基于(.position和.lookAt())属性,下面完成一段缓动动画
// 创建相机
const camera = new THREE.PerspectiveCamera(45, //视角window.innerWidth / window.innerHeight, //宽高比0.1, //近平面1000 //远平面
)
// 渲染函数
;(function animate() {camera.position.x += 0.1//相机直线运动动画requestAnimationFrame(animate)renderer.render(scene, camera)
})()// 渲染循环 相机圆周运动
let angle = 0; //用于圆周运动计算的角度值
const R = 100; //相机圆周运动的半径
;(function animate() {angle += 0.01;// 相机y坐标不变,在XOZ平面上做圆周运动camera.position.x = R * Math.cos(angle);camera.position.z = R * Math.sin(angle);renderer.render(scene, camera);requestAnimationFrame(render);
})()
2.2)父子元素
// 创建几何体
const geometry = new THREE.BoxGeometry(1, 1, 1)// 创建材质
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 })
// 创建父元素材质
const parMaterial = new THREE.MeshBasicMaterial({ color: 0xff0000 })
// 设置材质为线框模式
parMaterial.wireframe = true// 创建网络
const cube = new THREE.Mesh(geometry, material)
// 创建父元素网络
let parentCube = new THREE.Mesh(geometry, parMaterial)//添加到父元素上
parentCube.add(cube)
cube.position.set(-3, 0, 0)
parentCube.position.set(3, 0, 0)

3.物体旋转与缩放

// 设置放大缩小
cube.scale.set(2, 2, 2) //子放大2
parentCube.scale.set(2, 2, 2) // 父放大2  子基于2再放大2// 旋转
cube.rotation.x = Math.PI / 4 //父旋转
cube.rotation.x = Math.PI / 4 //子旋转,叠加父旋转

4.设置响应式画布全屏控制

threejs渲染输出的结果就是一个Cavnas画布,canvas画布也是HTML的元素之一,这意味着three.js渲染结果的布局和普通web前端习惯是一样的。

通过renderer.domElement属性可以访问threejs的渲染结果,也就是HTML的元素canvas画布

4.1)非全屏渲染
const width = 800; //宽度
const height = 500; //高度
const camera = new THREE.PerspectiveCamera(30, width / height, 1, 3000);
renderer.setSize(width, height); //设置three.js渲染区域的尺寸(像素px)
renderer.render(scene, camera); //执行渲染操作
document.getElementById('wegbl').appendChild(renderer.domElement);
4.2)全屏渲染
const width = window.innerWidth; //窗口文档显示区的宽度作为画布宽度
const height = window.innerHeight; //窗口文档显示区的高度作为画布高度
const renderer = new THREE.WebGLRenderer();
document.body.appendChild(renderer.domElement);
4.3)响应式画布
// 监听窗口变化
window.addEventListener('resize', () => {// 重置渲染器宽高比renderer.setSize(window.innerWidth, window.innerHeight)// 重置相机宽高比camera.aspect = window.innerWidth / window.innerHeight// 更新相机投影矩阵camera.updateProjectionMatrix()
})
4.4) 全屏控制
<template><div><button@click="toggleFullscreen"style="position: absolute; left: 10px; top: 10px; z-index: 999">点击全屏</button><button@click="outToggleFullscreen"style="position: absolute; left: 80px; top: 10px; z-index: 999">退出全屏</button></div>
</template>
// 按钮全屏
const toggleFullscreen = () => {// renderer.domElement.requestFullscreen()document.body.requestFullscreen()
}
// 退出全屏
const outToggleFullscreen = () => {document.exitFullscreen()
}

 感谢:b站up主:老陈打码 以及 threejs中文网 教学及参考文档
到此基础入门(二)学习告一段落,道阻且长,行则将至。与诸君共勉。 ⭐️

相关文章:

Three.js 入门(辅助、位移、父子关系、缩放旋转、响应式布局)

本篇主要学习内容 : 三维坐标系与辅助坐标系物体位移与父子元素物体的缩放与物体的旋转设置响应式画布与全屏控制 点赞 关注 收藏 学会了 本文使用 Three.js 的版本&#xff1a;171 基于 Vue3vite开发调试 1.三维坐标系与辅助坐标系 1.1) 导入three和轨道控制器 // 导入…...

python算法-用递归打印数字3的幂--Day017

文章目录 前言采用创新方式&#xff0c;精选趣味、实用性强的例子&#xff0c;从不同难度、不同算法、不同类型和不同数据结构进行总结&#xff0c;全面提升算法能力。例1.用递归打印数字例2.相对排名 总结 前言 采用创新方式&#xff0c;精选趣味、实用性强的例子&#xff0c…...

Selenium 与 Coze 集成

涵盖两者的基本概念、集成步骤、代码示例以及相关注意事项。 基本概念 Selenium:是一个用于自动化浏览器操作的工具集,支持多种浏览器(如 Chrome、Firefox 等),能够模拟用户在浏览器中的各种操作,如点击、输入文本、选择下拉框等,常用于 Web 应用的自动化测试。Coze:它…...

AWS CLI将读取器实例添加到Amazon Aurora集群

Amazon Aurora是AWS提供的一种兼容MySQL和PostgreSQL的关系数据库服务。Aurora集群由一个写入器实例和多个读取器实例组成,可以提供高可用性、高性能和可扩展性。在本文中,我们将介绍如何使用AWS命令行界面(CLI)将读取器实例添加到现有的Aurora集群中。 © ivwdcwso (ID: u…...

NTS库学习,找bug中......

基础知识 Coordinate: 表示一个二维坐标点&#xff0c;包括 X 和 Y 坐标值。 CoordinateSequence: 由一系列 Coordinate 对象组成的序列&#xff0c;可以表示线、多边形等几何对象的顶点。 CoordinateFilter: 用于对几何对象的坐标进行过滤或修改的接口。 Geometry: 表示一个几…...

五十天精通硬件设计第40天-硬件测试流程

目录 一、硬件测试流程概述 二、详细测试流程 1. 需求分析与测试计划 2. 测试环境搭建 3. 测试执行 3.1 基本功能测试 3.2 性能测试 3.3 环境与可靠性测试 3.4 安全与合规性测试 4. 问题分析与调试 5. 回归测试与报告输出 三、关键注意事项 四、常见问题与解决 五…...

R语言安装教程(附安装包)R语言4.3.2版本安装教程

文章目录 前言一、安装包下载二、R-4.3.2安装步骤三、rtools43安装步骤四、RStudio安装步骤 前言 本教程将详细、全面地为你介绍在 Windows 系统下安装 R 语言 4.3.2 的具体步骤。无论你是初涉数据领域的新手&#xff0c;还是希望更新知识体系的专业人士&#xff0c;只要按照本…...

数据库 安装initializing database不通过

出现一下情况时&#xff1a; 处理方法&#xff1a; 将自己的电脑名称 中文改成英文 即可通过...

自动驾驶两个传感器之间的坐标系转换

有两种方式可以实现两个坐标系的转换。 车身坐标系下一个点p_car&#xff0c;需要转换到相机坐标系下&#xff0c;旋转矩阵R_car2Cam&#xff0c;平移矩阵T_car2Cam。点p_car在相机坐标系下记p_cam. 方法1&#xff1a;先旋转再平移 p_cam T_car2Cam * p_car T_car2Cam 需要注…...

信号——进程间通信(20250225)

1. 信号 管道&#xff1a;进程间数据通信&#xff08;同步通信&#xff09; 信号&#xff1a;进程间通信,用来发送通知(异步通信&#xff0c;中断) 1&#xff09;同步通信:发送端和接收端&#xff0c;使用同一时钟通信 异步通信:发送端和接收端使用不同时钟通信 …...

transformer架构嵌入层位置编码之动态NTK-aware位置编码

前文,我们已经构建了一个小型的字符级语言模型,是在transformer架构基础上实现的最基本的模型,我们肯定是希望对该模型进行改进和完善的。所以我们的另外一篇文章也从数据预处理、模型架构、训练策略、评估方法、代码结构、错误处理、性能优化等多个方面提出具体的改进点,但…...

东信营销科技巨额补贴仍由盈转亏:毛利率大幅下滑,现金流告急

《港湾商业观察》施子夫 近期&#xff0c;东信营销科技有限公司&#xff08;以下简称&#xff0c;东信营销科技&#xff09;递表港交所&#xff0c;联席保荐机构为海通国际和中银国际。 东信营销科技的国内运营主体为深圳市东信时代信息技术有限公司。尽管期内收入规模有所提…...

[电感、磁珠、0欧姆电阻]的区别与应用特性

1. 电感(Inductor) 基础特性: 储能元件:通过磁场存储能量,阻碍电流突变()。 核心参数:电感值(L)、额定电流、直流电阻(DCR)、自谐振频率(SRF)。 频率特性:感抗 ,(通直流、阻交流),低频时阻抗低,高频时阻抗高(但受SRF限制)。 电路符号及实物:多为绕线结…...

车载诊断架构 --- LIN节点路由转发注意事项

我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 简单,单纯,喜欢独处,独来独往,不易合同频过着接地气的生活,除了生存温饱问题之外,没有什么过多的欲望,表面看起来很高冷,内心热情,如果你身…...

前端 AJAX 二、AJAX使用

环境准备&#xff1a; 使用AJAX技术我们需要用到HTML/CSS/JS/jQuery/JavaWeb相关知识,原生的JS也可以进行AJAX的操作,但是相对比较繁琐也没有必要,故此我们使用jQuery封装后的AJAX技术来进行学习; 创建AJAX请求 $.ajax({url : "ajax/getName?id"id,// ajax请求的…...

Windows - 通过ssh打开带有图形界面的程序 - 一种通过计划任务的曲折实现方式

Windows(奇思妙想) - 通过ssh打开带有图形界面的程序 - 一种通过计划任务的曲折实现方式 前言 Windows启用OpenSSH客户端后就可以通过SSH的方式访问Windows了。但是通过SSH启动的程序&#xff1a; 无法显示图形界面会随着SSH进程的结束而结束 于是想到了一种通过执行“计划…...

Android ViewStub延迟初始化加载布局View,Kotlin

Android ViewStub延迟初始化加载布局View&#xff0c;Kotlin activity_my.xml: <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_width"match_…...

Web自动化之Selenium下Chrome与Edge的Webdriver常用Options参数

目录 引言 说明 Add_argument() 添加方式 常用参数 Add_experimental_option() 添加方式 常用方法 任务结束后仍然保持浏览器打开 禁用“Chrome 正受到自动测试软件的控制”提示 设置下载路径 禁用弹窗拦截 禁用图片加载 禁用 JavaScript 注意 引言 …...

数据安全_笔记系列05:数据合规与隐私保护(GDPR、CCPA、中国《数据安全法》)深度解析

数据安全_笔记系列05&#xff1a;数据合规与隐私保护&#xff08;GDPR、CCPA、中国《数据安全法》&#xff09;深度解析 在全球数据跨境流动和隐私保护强监管的背景下&#xff0c;企业需同时满足多法域合规要求。以下从 法规要点、核心差异、实施策略、跨境传输、典型案例 等维…...

AF3 DataPipeline类process_multiseq_fasta 方法解读

AlphaFold3 data_pipeline 模块DataPipeline类的 process_multiseq_fasta 方法用于处理多序列 FASTA 文件,生成 AlphaFold3 结构预测所需的特征,适用于多链复合物的预测。它结合了 Minkyung Baek 在 Twitter 上提出的“AlphaFold-Gap”策略,即通过在多链 MSA 中插入固定长度…...

Ubuntu音频架构演进:从PulseAudio到PipeWire的配置实战与蓝牙修复

1. Ubuntu音频架构演进&#xff1a;从PulseAudio到PipeWire的技术背景 如果你最近升级到Ubuntu 22.04或更高版本&#xff0c;可能会发现音频系统变得不太一样了。这背后是Ubuntu正在经历一场音频架构的重大变革——从传统的PulseAudio逐步过渡到新一代的PipeWire。我刚开始接触…...

R语言机器学习驱动生态经济研究:从CEADs数据清洗、随机森林建模到因果推断全流程

在生态文明建设与“双碳”战略目标全面推进的当下&#xff0c;精准量化能源与环境领域的碳排放清单、深入挖掘驱动因子并预测未来趋势&#xff0c;已成为环境经济学、生态学及公共政策研究的核心命题。传统的统计学方法在面对海量异构数据、非线性复杂关系及多维评价体系时&…...

从DDR4到DDR5,我的PCB布线避坑血泪史:信号、电源、时序一个都不能错

从DDR4到DDR5的PCB设计实战&#xff1a;一位工程师的避坑指南 第一次拿到DDR5的设计需求时&#xff0c;我自信满满地以为这不过是DDR4的"小升级版"。直到项目进入调试阶段&#xff0c;那些诡异的信号完整性问题、莫名其妙的时序错误和电源噪声导致的随机崩溃&#xf…...

SQL学习记录(一)SQLZOO答案

SQL学习记录&#xff08;一&#xff09; 包含SELECT basics、SELECT names/zh、SELECT Quiz/zh 文章目录SQL学习记录&#xff08;一&#xff09;[0、SELECT basics](https://sqlzoo.net/wiki/SELECT_basics/zh)[1.1、 SELECT names/zh](https://sqlzoo.net/wiki/SELECT_names/z…...

mT5中文-base零样本增强模型应用场景:中文OCR识别后文本纠错与语义补全

mT5中文-base零样本增强模型应用场景&#xff1a;中文OCR识别后文本纠错与语义补全 1. 模型介绍与核心能力 mT5中文-base零样本增强模型是一个专门针对中文文本处理优化的AI模型&#xff0c;它在原有mT5模型基础上进行了重要改进。这个模型最大的特点是使用了海量中文数据进行…...

AIAgent联邦学习架构设计核心矛盾解析(通信开销×模型收敛×合规边界三重博弈)

第一章&#xff1a;AIAgent联邦学习架构设计核心矛盾解析&#xff08;通信开销模型收敛合规边界三重博弈&#xff09; 2026奇点智能技术大会(https://ml-summit.org) 在AI Agent驱动的联邦学习系统中&#xff0c;各参与方既是智能体又是数据孤岛守护者&#xff0c;其架构设计天…...

Antv L7 + Mapbox 实现3D地图可视化:从基础配置到高级应用

1. 为什么选择Antv L7 Mapbox做3D地图 第一次接触3D地图可视化时&#xff0c;我试过不少方案&#xff0c;最后发现Antv L7和Mapbox的组合最顺手。这个组合最大的优势是既能享受Mapbox强大的底图服务&#xff0c;又能用L7实现各种炫酷的数据可视化效果。 L7是阿里AntV团队推出的…...

测试架构师核心能力:设计思维培养

在数字化转型浪潮中&#xff0c;测试架构师的角色已从技术执行者进化为质量战略家。设计思维作为核心能力&#xff0c;正成为连接用户需求与质量保障的关键枢纽。它要求测试从业者超越传统功能验证&#xff0c;以用户为中心重构测试范式&#xff0c;驱动产品质量与体验的双重提…...

Ubuntu2024编译CMake时OpenSSL缺失问题全解析

1. 问题现象与背景解析 最近在Ubuntu 2024系统上手动编译CMake时&#xff0c;很多开发者都遇到了一个典型错误&#xff1a;Could not find OpenSSL。这个报错通常出现在执行./bootstrap阶段&#xff0c;系统提示需要安装OpenSSL开发包。我上周在给团队搭建新开发环境时&#xf…...

多线程:生产者消费者

本文展示了一个基于C的多线程生产者-消费者模型实现。核心组件ThreadSafeQueue是一个线程安全的队列模板类&#xff0c;使用互斥锁和条件变量实现同步机制&#xff0c;支持阻塞式push/pop操作。系统包含3个生产者线程&#xff08;各生产10个产品&#xff09;和2个消费者线程&am…...