threeJS——安装以及三要素
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 一、安装
- 二、三要素
- 1.场景
- 1.1创建场景
- 1.2向场景添加元素
- 1.3场景属性
- 2.相机
- 2.1相机特点
- 2.2正交相机
- 2.3空间布局
- 2.4小姐操作
- 3.渲染器
- 总结
前言
本章简单介绍前端框架threeJS的使用,使用threeJS我们可以构建出前端的3D界面。不仅能应用在看房、模型分享网站等有需求的项目中,还可以在其他项目中做出酷炫的效果。
一、安装
为了方便查看效果,我们用vite快速创建一个项目,然后使用npm工具进行安装,命令如下:
npm install --save three
安装完成后,我们编写一个html文件测试
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Document</title></head><body><script type="module">import * as THREE from "three";// 创建场景const scene = new THREE.Scene();// 加载图片作为背景// const loader = new THREE.TextureLoader();// loader.load("./image/1.png", (texture) => {// scene.background = texture;// });// 创建透视相机const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000);// 修改相机位置camera.position.set(0, 0, 5);// 旋转相机camera.lookAt(0, 0, 0);// 物体网格const geometry = new THREE.BoxGeometry(1, 1, 1);// 物体材质const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });const cube = new THREE.Mesh(geometry, material);// 添加到场景scene.add(cube);// 创建网格辅助线const gridHelper = new THREE.GridHelper(10, 10);scene.add(gridHelper);// 创建渲染器const renderer = new THREE.WebGLRenderer();renderer.setSize(window.innerWidth, window.innerHeight);// 将渲染出的元素追加到页面document.body.appendChild(renderer.domElement);function animation() {requestAnimationFrame(animation);cube.rotation.x += 0.01;cube.rotation.y += 0.01;// 渲染场景和相机renderer.render(scene, camera);}animation();</script></body>
</html>
运行后,对应页面上会出现一个不停旋转的立方体

然后说明threeJS可以使用了
二、三要素
treeJS中有三个重要元素
- 场景
- 相机
- 渲染器
1.场景
场景元素(scene)中存储着我们所有的对象(模型、灯光、摄像机),是一个容器
1.1创建场景
从导入three包中提供的函数,可以创建一个场景对象
import * as THREE from 'three';const scene = new THREE.Scene();
1.2向场景添加元素
有了场景后,我们就可以向里面添加需要的元素,这个元素可以是模型、灯光等,threeJS中提供了多种默认的模型,也可以自己读取建模软件中的模型进行导入,我们试着导入一个默认的立方体:
const geometry = new THREE.BoxGeometry( 1, 1, 1 );// 物体材质
const material = new THREE.MeshBasicMaterial( { color: 0x00ff00 } );
const cube = new THREE.Mesh( geometry, material );
scene.add( cube );
对于模型而言,创建出的物体还需要为其指定材质才能够正常显示。
最后使用BoxGeometry()创建模型顶点数据,用MeshBasicMaterial()创建模型材质,两者结合变成完整的立方体模型,然后添加到场景scene中
1.3场景属性
场景除了可以存储各种元素以外,场景对象本身也有很多属性,比如我们可以使用background属性设置场景背景

2.相机
threejs中提供了多种类型的相机:正交相机(距离不影响物体大小)、透视相机(物体近大远小)、立方相机(用于全景图)、立体相机。
这里主要使用的是透视相机,因为符合人眼的规律。
2.1相机特点
在开始介绍该对象的属性前,先说一下3D建模中透视相机的特点:

相机的视野区域是一个立方体(锥体),离我们人眼原的一段是远端,离我们人眼近的一端是近端,处于这个立方体内的物体会被投射到近端,形成画面。
2.2正交相机
我们说过,相机有很多种类型,上面视野范围呈锥体的是透视相机,而正交相机的视角范围是一个立方体,正交相机投射的物体会保留原来的大小(不会近大远小)。
这种相机常被用于一些需要精准测量的模型中,不会因为缩放干扰到数据。

2.3空间布局
场景中用三维坐标来描述位置,threejs中的布局如下(用blender模拟一下):

如果是刚创建出的元素(包括相机)都是生成在场景原点的位置,如果我们想要成功渲染出模型,需要先调整模型和相机的位置,让模型处于相机的可视范围内。
2.4小姐操作
相机可以进行位置的移动和视角的旋转,这些可以帮助我们在页面渲染出一些想要的效果。
// 修改相机位置camera.position.set(0, 0, 10);// 视角中心位置(看向哪)camera.lookAt(5, 0, 0);
3.渲染器
设置好场景和相机后需要使用渲染器才可以真正渲染到页面上。
本质是在canvas标签上来展示效果。
渲染器我们这里介绍WebGLRenderer
调用构造器可以创建对应对象,其中可以设置canvas属性来指定一个已有的canvas标签,在里面渲染效果。
// 创建渲染器const renderer = new THREE.WebGLRenderer({canvas: document.querySelector('.canvas1')});
如果不设置,或者没有现成的canvas元素,就需要用追加节点的方式动态的追加一个新的canvas元素。
document.body.appendChild(renderer.domElement)
这里renderer.domElement指向的是用来渲染的canvas对象,如果在构造方法中指定过,就是我们指定的那一个。如果是没有指定过,就会自动生成一个canvas,这个时候再用来作为追加节点就可以了。
总结
由此我们已经能够简单使用threeJS创建简单模型,不过想要做出酷炫效果,需要导入外部模型,这个后面再说。
相关文章:
threeJS——安装以及三要素
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、安装二、三要素1.场景1.1创建场景1.2向场景添加元素1.3场景属性 2.相机2.1相机特点2.2正交相机2.3空间布局2.4小姐操作 3.渲染器 总结 前言 本章简单介绍前…...
【Electron入门】进程环境和隔离
目录 一、主进程和渲染进程 1、主进程(main) 2、渲染进程(renderer) 二、预加载脚本 三、沙盒化 为单个进程禁用沙盒 全局启用沙盒 四、环境访问权限控制:contextIsolation和nodeIntegration 1、contextIsola…...
提示词框架介绍和使用场景
框架介绍 CO-STAR 框架 定义 CO-STAR是六个关键要素的缩写,每个字母代表一个特定的部分: Context(上下文) :提供任务的背景信息或环境 当前任务是为一家科技公司撰写一篇关于人工智能发展趋势的文章/ 需要为一场面向高中生的科普讲座准备内容Objective(目标) :明确任…...
牛客NC288803 和+和
import java.util.Comparator;import java.util.PriorityQueue;import java.util.Scanner;public class Main {public static void main(String[] args) {// 创建Scanner对象用于读取输入Scanner sc new Scanner(System.in);// 读取两个整数n和m,分别表示数组的…...
AI学习第七天
数组:基础概念、存储特性及力扣实战应用 在计算机科学与数学的广袤领域中,数组作为一种极为重要的数据结构,发挥着不可或缺的作用。它就像一个有序的 “数据仓库”,能高效地存储和管理大量数据。接下来,让我们深入了解…...
【uniapp原生】实时记录接口请求延迟,并生成写入文件到安卓设备
在开发实时数据监控应用时,记录接口请求的延迟对于性能分析和用户体验优化至关重要。本文将基于 UniApp 框架,介绍如何实现一个实时记录接口请求延迟的功能,并深入解析相关代码的实现细节。 前期准备&必要的理解 1. 功能概述 该功能的…...
XR应用测试:探索虚拟与现实的边界
引言 随着XR(扩展现实,Extended Reality)技术的快速发展,VR(虚拟现实)、AR(增强现实)和MR(混合现实)应用逐渐渗透到游戏、教育、医疗、工业等多个领域。对于…...
算法之算法思想
算法思想 ♥算法思想知识体系详解♥ | Java 全栈知识体系 经典算法思想总结 经典算法思想总结(含LeetCode题目推荐) | JavaGuide...
mac电脑中使用无线诊断.app查看连接的Wi-Fi带宽
问题 需要检查连接到的Wi-Fi的AP硬件支持的带宽。 步骤 1.按住 Option 键,然后点击屏幕顶部的Wi-Fi图标;2.从下拉菜单中选择 “打开无线诊断”(Open Wireless Diagnostics);3.你可能会看到一个提示窗口,…...
物理竞赛中的线性代数
线性代数 1 行列式 1.1 n n n 阶行列式 定义 1.1.1:称以下的式子为一个 n n n 阶行列式: ∣ A ∣ ∣ a 11 a 12 ⋯ a 1 n a 21 a 22 ⋯ a 2 n ⋮ ⋮ ⋱ ⋮ a n 1 a n 2 ⋯ a n n ∣ \begin{vmatrix}\mathbf A\end{vmatrix} \begin{vmatrix} a_{11…...
FFmpeg-chapter3-读取视频流(原理篇)
ffmpeg网站:About FFmpeg 1 库介绍 (1)libavutil是一个包含简化编程函数的库,包括随机数生成器、数据结构、数学例程、核心多媒体实用程序等等。 (2)libavcodec是一个包含音频/视频编解码器的解码器和编…...
机器视觉线阵相机分时频闪选型/机器视觉线阵相机分时频闪选型
在机器视觉系统中,线阵相机的分时频闪技术通过单次扫描切换不同光源或亮度,实现在一幅图像中捕捉多角度光照效果,从而提升缺陷检测效率并降低成本。以下是分时频闪线阵相机的选型要点及关键考量因素: 一、分时频闪技术的核心需求 多光源同步控制 分时频闪需相机支持多路光源…...
「Selenium+Python自动化从0到1②|2025浏览器操控7大核心API实战(附高效避坑模板))」
Python 自动化操作浏览器基础方法 在进行 Web 自动化测试时,操作浏览器是必不可少的环节。Python 结合 Selenium 提供了强大的浏览器操作功能,让我们能够轻松地控制浏览器执行各种任务。本文将详细介绍如何使用 Python 和 Selenium 操作浏览器的基本方法…...
矩阵系列 题解
1.洛谷 P1962 斐波那契数列 题意 大家都知道,斐波那契数列是满足如下性质的一个数列: F n { 1 ( n ≤ 2 ) F n − 1 F n − 2 ( n ≥ 3 ) F_n \left\{\begin{aligned} 1 \space (n \le 2) \\ F_{n-1}F_{n-2} \space (n\ge 3) \end{aligned}\right. …...
活动报名:Voice Agent 技术现状及应用展望丨 3.8 北京
「人人发言,所有人向所有人学习!」——Z 沙龙 「一起探索下一代语音驱动的人机交互界面。」——RTE 开发者社区 3 月 8 日周六下午,北京,「智谱 Z 计划&Z Fund」和「RTE 开发者社区」将合办一场 Voice Agent 主题的线下活动…...
【卡牌——二分】
题目 分析 发现答案具有二分性,果断二分答案 代码 #include <bits/stdc.h> using namespace std; using ll long long;const int N 2e510;int n, a[N], li[N]; ll m;bool check(int x) {ll t m;for(int i 1; i < n; i){if(a[i] > x) continue; //…...
《第十五部分》STM32之FLASH闪存(终结篇)
本章是江科大自学STM32的最后一章节,历经2个月的断断续续时间,终于学到了最后,总结,这次的学习历程,相对于学习51还是略出一些难度,也就是若你是非科班,学习起来还是有一定的难度的,…...
属性的设置
笔记 class Student:def __init__(self, name, gender):self.name nameself.__gender gender # self.__gender 是私有的实例属性# 使用property 修改方法,将方法转成属性使用propertydef gender(self):return self.__gender# 将我们的gender这个属性设置为可写属…...
本地部署Deepseek+Cherry Studio
为啥要本地部署deepseek? 因为给deepseek发送指令得到服务器繁忙的回馈,本地部署会运行的更快 1.Ollama安装与部署 Ollama是一个开源框架,专为在本地机器上便捷部署和运行大型语言模型(LLM)而设计 winR——cmd——ol…...
CMU15445(2023fall) Project #2 - Extendible Hash Index 匠心分析
胡未灭,鬓已秋,泪空流 此生谁料 心在天山 身老沧州 ——诉衷情 完整代码见: SnowLegend-star/CMU15445-2023fall: Having Conquered the Loftiest Peak, We Stand But a Step Away from Victory in This Stage. With unwavering determinati…...
Qtile扩展开发终极指南:编写自定义命令和工具的完整教程
Qtile扩展开发终极指南:编写自定义命令和工具的完整教程 【免费下载链接】qtile :cookie: A full-featured, hackable tiling window manager written and configured in Python (X11 Wayland) 项目地址: https://gitcode.com/gh_mirrors/qt/qtile Qtile是一…...
数据库死锁的排查:从现象到根因
在软件测试工作中,数据库的稳定性和数据一致性是评估系统质量的关键维度。死锁问题,作为数据库并发控制中的“顽疾”,其随机性、隐蔽性和破坏性常常让测试人员感到棘手。它不仅是性能测试中的“拦路虎”,更可能在线上引发严重故障…...
OpenClaw+Qwen3-14b_int4_awq:智能客服对话日志分析工具
OpenClawQwen3-14b_int4_awq:智能客服对话日志分析工具 1. 为什么需要自动化客服日志分析 上个月我接手了一个小团队的客服优化项目,每天要处理上百条对话记录。手动翻阅这些聊天内容不仅耗时,还容易遗漏关键问题。最头疼的是,当…...
Direct Memory内存泄漏排查指南:从JVM参数到Cleaner机制详解
Direct Memory内存泄漏排查指南:从JVM参数到Cleaner机制详解 在Java应用的高性能场景中,Direct Memory(直接内存)因其能够绕过JVM堆内存直接与系统交互的特性,成为提升I/O效率的利器。但这份"利器"往往也是把…...
HFSS新手必看:从ADS联合仿真到TDR分析的5个实用技巧
HFSS新手必看:从ADS联合仿真到TDR分析的5个实用技巧 刚接触HFSS的工程师常会遇到这样的困惑:明明按照教程设置了波导端口,仿真结果却与实测数据偏差较大;试图分析传输线阻抗时,TDR曲线出现异常波动;想要联合…...
跨境电商利器:OpenClaw+Phi-3-vision-128k-instruct自动翻译商品图片
跨境电商利器:OpenClawPhi-3-vision-128k-instruct自动翻译商品图片 1. 为什么需要自动化图片翻译 作为跨境电商卖家,我每天都要处理大量商品图片的翻译工作。传统流程需要人工截图、翻译、PS替换文字、再导出图片,整个过程耗时耗力。一张简…...
避坑指南:OpenClaw安装Qwen3.5-9B常见的5个配置错误
避坑指南:OpenClaw安装Qwen3.5-9B常见的5个配置错误 1. 为什么需要这篇指南 上周我在本地部署OpenClaw对接Qwen3.5-9B时,经历了从满怀期待到崩溃边缘的全过程。本以为按照官方文档就能轻松搞定,结果在npm权限、端口冲突、模型地址配置等环节…...
2025届学术党必备的六大降重复率助手推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 提高人工智能生成内容即AIGC的检测难度,关键之处在于增强文本的自然特性与个性化…...
三步生成炫酷3D魔鬼面具:用快马AI快速构建交互式视觉原型
今天想和大家分享一个超实用的技巧——如何用InsCode(快马)平台快速生成3D魔鬼面具的交互式原型。作为一个经常需要做创意展示的设计师,这个工具真的帮我省去了大量开发时间。 从创意到原型的极速转换 以前做3D展示需要先建模再写代码,现在只需要在快马平…...
ref vs reactive:Vue 3 响应式 API 到底该怎么选
在 Vue 3 的响应式系统中,ref 和 reactive 是最核心的 API,但它们的定位、使用场景和底层实现存在本质差异。理解二者的区别并合理选择,是掌握 Vue 3 响应式编程的关键。以下从 7 个维度深入剖析,提供 2000 字级别的详细指南。 1.…...
