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

Three.js 基础概念:构建3D世界的核心要素

文章目录

    • 前言
    • 一、场景(Scene)
    • 二、相机(Camera)
    • 三、渲染器(Renderer)
    • 四、物体(Object)
    • 五、材质(Material)
    • 六、几何体(Geometry)
    • 七、光源(Light)
    • 结语


前言

在数字化时代的浪潮中,Three.js 作为一款强大的 JavaScript 库,使得开发者能够轻松地将逼真的三维图形带入网页。对于初学者来说,理解 Three.js 的核心概念是掌握这个库的关键第一步。本文将深入探讨这些基础概念,帮助你为创建自己的3D项目打下坚实的基础。


一、场景(Scene)

场景就像是一个舞台,所有3D元素都在这里共存。它是容纳几何体、光源、相机等所有对象的容器。在 Three.js 中,场景通过 THREE.Scene() 构造函数创建:

const scene = new THREE.Scene();

一旦有了场景,我们就可以开始向其中添加各种元素,从而构建出想要展示的世界。

二、相机(Camera)

为了看到场景中的内容,我们需要一个“眼睛”,这就是相机的作用。Three.js 提供了两种主要类型的相机:透视相机 (THREE.PerspectiveCamera) 和正交相机 (THREE.OrthographicCamera)。透视相机模仿了人眼观察世界的自然方式,而正交相机则提供了平行投影,常用于 CAD 软件和某些类型的游戏。

创建一个透视相机时,你需要指定视场角(FOV)、宽高比(aspect ratio)、近裁剪面(near clipping plane)和远裁剪面(far clipping plane)。这些参数决定了相机如何捕捉场景以及哪些部分会被渲染到屏幕上。

const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.set(0, 0, 5); // 设置相机位置

三、渲染器(Renderer)

渲染器的任务是把场景和相机的信息转化为可以显示在屏幕上的图像。Three.js 支持多种渲染技术,但最常用的是 WebGL 渲染器 (THREE.WebGLRenderer),因为它利用了现代 GPU 的强大性能,可以高效地处理复杂的图形。

要使用 WebGL 渲染器,首先要创建一个实例,并设置其尺寸以匹配浏览器窗口大小。然后,需要将渲染器的 DOM 元素添加到页面上,以便它能够正确显示输出。

const renderer = new THREE.WebGLRenderer({ antialias: true });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);

四、物体(Object)

物体是 Three.js 场景中最基本的组成部分之一。它们可以是几何形状、光源、甚至是其他更复杂的实体。每个物体都继承自 THREE.Object3D 类,这意味着它们共享相同的基本属性和方法,如位置、旋转和缩放。

要创建一个物体,通常需要先定义它的几何形状和材质,然后通过 THREE.Mesh 将两者组合起来形成一个网格。最后,将网格添加到场景中即可。

const geometry = new THREE.BoxGeometry(); // 创建几何体
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 }); // 创建材质
const cube = new THREE.Mesh(geometry, material); // 创建网格
scene.add(cube); // 添加到场景

五、材质(Material)

材质定义了物体表面的外观,包括颜色、纹理、反射特性等。Three.js 提供了多种预定义的材质类型,每种都有不同的视觉效果。例如,MeshBasicMaterial 不考虑光照条件,总是以指定的颜色显示;而 MeshStandardMaterial 则能与光源互动,产生更加真实的阴影和高光效果。

// 使用 MeshStandardMaterial 可以实现更真实的光照效果
const material = new THREE.MeshStandardMaterial({ color: 0x00ff00 });

六、几何体(Geometry)

几何体决定了物体的形状。Three.js 内置了许多常用的几何体构造函数,如球体、平面、立方体等,同时也支持自定义几何体的创建。几何体可以通过顶点和面来描述,这使得开发者可以根据需求灵活地设计物体形态。

const geometry = new THREE.SphereGeometry(1, 32, 32); // 创建球体几何体

七、光源(Light)

没有光源,即使是使用了光照敏感型材质的物体也无法被照亮。Three.js 提供了不同类型的光源来模拟现实世界的光照环境。方向光(THREE.DirectionalLight)、点光源(THREE.PointLight)、聚光灯(THREE.SpotLight)等都能用来营造丰富的光影效果。

const light = new THREE.DirectionalLight(0xffffff, 1); // 创建方向光
light.position.set(5, 5, 5).normalize(); // 设置光源位置
scene.add(light); // 添加到场景

结语

上述六大基础概念——场景、相机、渲染器、物体、材质和光源,构成了 Three.js 的核心框架。了解并熟练运用这些概念,不仅能帮助你快速入门 Three.js,还能为未来探索更高级的主题铺平道路。无论是制作交互式网站还是开发复杂的游戏,掌握好这些基础知识都是至关重要的。希望这篇文章能够成为你学习 Three.js 的良好起点,激发你对3D编程的热情和创造力。

相关文章:

Three.js 基础概念:构建3D世界的核心要素

文章目录 前言一、场景(Scene)二、相机(Camera)三、渲染器(Renderer)四、物体(Object)五、材质(Material)六、几何体(Geometry)七、光…...

如何用代码提交spark任务并且获取任务权柄

在国内说所有可能有些绝对,因为确实有少数大厂技术底蕴确实没的说能做出自己的东西,但其他的至少95%数据中台平台研发方案,都是集群中有一个持久化的程序,来接收任务信息,并向集群提交任务同时获取任务的权柄&#xff…...

关于Mac中的shell

1 MacOS中的shell 介绍: 在 macOS 系统中,Shell 是命令行与系统交互的工具,用于执行命令、运行脚本和管理系统。macOS 提供了多种 Shell,主要包括 bash 和 zsh。在 macOS Catalina(10.15)之前&#xff0c…...

【npm依赖包介绍】借助rimraf依赖包,在用npm run build构建项目时,清空dist目录,避免新旧混合

文章目录 背景如何使用附上rimraf的介绍和说明主要作用使用场景安装使用示例异步删除同步删除 参考资料 背景 在npm run build时,一般都会清空项目中已有的dist目录再构建,避免新旧混合。 如何使用 可以简单使用rimraf这个npm依赖包。 目前rimraf的最…...

爬虫学习记录

1.概念 通过编写程序,模拟浏览器上网,然后让其去互联网上抓取数据的过程 通用爬虫:抓取的是一整张页面数据聚焦爬虫:抓取的是页面中的特定局部内容增量式爬虫:监测网站中数据更新的情况,只会抓取网站中最新更新出来的数据 robots.txt协议: 君子协议,网站后面添加robotx.txt…...

Java Spring Boot实现基于URL + IP访问频率限制

点击下载《Java Spring Boot实现基于URL IP访问频率限制(源代码)》 1. 引言 在现代 Web 应用中,接口被恶意刷新或暴力请求是一种常见的攻击手段。为了保护系统资源,防止服务器过载或服务不可用,需要对接口的访问频率进行限制。本文将介绍如…...

C4D2025 win版本安装完无法打开,提示请将你的maxon App更新至最新版本,如何解决

最近安装C4D2025 win版本时,明明按步骤安装完成,结果打开提示提示请将你的maxon App更新至最新版本?遇到这种情况该如何解决呢。 一开始我的思路以为是旧版本没有删除干净,所以将电脑里有关maxon的软件插件都卸载了,重…...

微信小程序实现登录注册

文章目录 1. 官方文档教程2. 注册实现3. 登录实现4. 关于作者其它项目视频教程介绍 1. 官方文档教程 https://developers.weixin.qq.com/miniprogram/dev/framework/路由跳转的几种方式: https://developers.weixin.qq.com/miniprogram/dev/api/route/wx.switchTab…...

SpringBoot环境和Maven配置

SpringBoot环境和Maven配置 1. 环境准备2. Maven2.1 什么是Maven2.2 为什么要学 Maven2.3 创建一个 Maven项目2.4 Maven核心功能2.4.1 项目构建2.4.2 依赖管理2.4.3 Maven Help插件 2.5 Maven 仓库2.5.1本地仓库2.5.2 中央仓库2.5.3 私有服务器, 也称为私服 2.6 Maven设置国内源…...

大语言模型训练所需的最低显存,联邦大语言模型训练的传输优化技术

联邦大语言模型训练的传输优化技术 目录 联邦大语言模型训练的传输优化技术大语言模型训练所需的最低显存大语言模型训练所需的最低显存 基于模型微调、压缩和分布式并行处理的方法,介绍了相关开源模型及技术应用 核心创新点 多维度优化策略:综合运用基于模型微调、模型压缩和…...

1.07 标准IO

1.思维导图 2.先编写以下结构体 struct Student { char name[20]; double math; double chinese; double english; double physical; double chemical; double…...

恒压恒流原边反馈控制芯片 CRE6289F

CRE6289F 系列产品是一款内置高压 MOS 功率开关管的高性能多模式原边控制的开关电源芯片。较少的外围元器件、较低的系统成本设计出高性能的交直流转换开关电源。CRE6289F 系列产品提供了极为全面和性能优异的智能化保护功能,包括逐周期过流保护、软启动、芯片过温保…...

Java中线程中断的几种方式,你了解吗?

Java中线程,可以使用 interrupt() 方法来实现线程的中断,那么,线程中中断的方式有几种呢?接下来,我们将介绍3种不同的线程中断方式,跟随我们的脚步,一起去看看! 目录 第一招&#xf…...

Tesseract5.4.0自定义LSTM训练

准备jTessBoxEditor,然后配置环境变量。 1、将图片转换成tif格式的,这里需要用画图工具另存为; 2、生成box文件 执行命令: tesseract agv.normal.exp1.tif agv.normal.exp1 -l eng --psm 6 batch.nochop makebox 关于box文件…...

centOS7

特殊权限 set_uid 赋予所有者身份 chmod us 文件 set_gid 赋予所有组身份 chmod gs 文件/目录 sticky_bit 防火墙 firewall-cmd 开启端口 firewall-cmd --zonepublic --add-port8080/tcp --permanent 重启防火墙 systemctl restart firewalld 查看开启的所有端口 fi…...

HTML5 弹跳动画(Bounce Animation)详解

HTML5 弹跳动画(Bounce Animation)详解 弹跳动画是一种动态效果,使元素在出现或消失时看起来像是在跳动。这种效果可以通过 CSS 动画或 JavaScript 来实现,增强用户体验。 1. 使用 CSS 实现弹跳动画 可以使用 CSS 的 keyframes…...

4.1.3 串

文章目录 串的基本概念串的基本操作串的存储结构 串的基本概念 串,仅由字符构成的有限序列。 串长:串中的字符个数。空串:长度为0的串。空格串:一个或多个空格构成的串。子串:串中任意长度连续字符构成的序列。含有字…...

国产编辑器EverEdit - 两种删除空白行的方法

1 使用技巧:删除空白行 1.1 应用场景 用户在编辑文档时,可能会遇到很多空白行需要删除的情况,比如从网页上拷贝文字,可能就会存在大量的空白行要删除。 1.2 使用方法 1.2.1 方法1: 使用编辑主菜单 选择主菜单编辑 …...

1月7日星期二今日早报简报微语报早读

1月7日星期二,农历腊月初八,早报#微语早读。 1、公安部:已为一线民警配备执法记录仪130万余部,规范现场执法; 2、浙江提出2035年全省域基本实现共同富裕; 3、“汕头牛肉丸”有新标准!1月6日起…...

随机置矩阵列为0[矩阵乘法pytorch版]

文章目录 1. 举例:2. python 代码 1. 举例: A [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 ] , r a n d [ 0 , 5 , 2 ] → A [ 0 1 0 3 4 0 6 7 0 9…...

C++:std::is_convertible

C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器

一.自适应梯度算法Adagrad概述 Adagrad&#xff08;Adaptive Gradient Algorithm&#xff09;是一种自适应学习率的优化算法&#xff0c;由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率&#xff0c;适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

三维GIS开发cesium智慧地铁教程(5)Cesium相机控制

一、环境搭建 <script src"../cesium1.99/Build/Cesium/Cesium.js"></script> <link rel"stylesheet" href"../cesium1.99/Build/Cesium/Widgets/widgets.css"> 关键配置点&#xff1a; 路径验证&#xff1a;确保相对路径.…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求&#xff0c;由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面&#xff1a; &#x1f3db;️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限&#xff0c;形成层级清晰的管理网络&#xf…...

第一篇:Agent2Agent (A2A) 协议——协作式人工智能的黎明

AI 领域的快速发展正在催生一个新时代&#xff0c;智能代理&#xff08;agents&#xff09;不再是孤立的个体&#xff0c;而是能够像一个数字团队一样协作。然而&#xff0c;当前 AI 生态系统的碎片化阻碍了这一愿景的实现&#xff0c;导致了“AI 巴别塔问题”——不同代理之间…...

leetcodeSQL解题:3564. 季节性销售分析

leetcodeSQL解题&#xff1a;3564. 季节性销售分析 题目&#xff1a; 表&#xff1a;sales ---------------------- | Column Name | Type | ---------------------- | sale_id | int | | product_id | int | | sale_date | date | | quantity | int | | price | decimal | -…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

Go 并发编程基础:通道(Channel)的使用

在 Go 中&#xff0c;Channel 是 Goroutine 之间通信的核心机制。它提供了一个线程安全的通信方式&#xff0c;用于在多个 Goroutine 之间传递数据&#xff0c;从而实现高效的并发编程。 本章将介绍 Channel 的基本概念、用法、缓冲、关闭机制以及 select 的使用。 一、Channel…...