Three.js 快速入门构建你的第一个 3D 应用

![

开发领域:前端开发 | AI 应用 | Web3D | 元宇宙
技术栈:JavaScript、React、Three.js、WebGL、Go
经验经验:6年+ 前端开发经验,专注于图形渲染和AI技术
开源项目:github 晓智元宇宙、数字孪生引擎、前端面试题
大家好!我是 [晓智],一位热爱探索新技术的前端开发者,在这里分享前端和Web3D、AI技术的干货与实战经验。如果你对技术有热情,欢迎关注我的文章,我们一起成长、进步!

在这里插入图片描述

随着网页和应用对视觉效果要求的提高,3D 图形在前端开发中的应用越来越普遍。Three.js 是一种用于在浏览器中构建 3D 图形的 JavaScript 库,它封装了 WebGL,简化了 3D 图形的创建流程。本文将带你快速入门 Three.js,从基本概念到实现一个简单的 3D 场景。


什么是 Three.js?

Three.js 是一个用于在浏览器中创建和渲染 3D 图形的 JavaScript 库。它建立在 WebGL 之上,提供了更易于理解和操作的 API,大大降低了创建复杂 3D 应用的难度。

Three.js 的主要功能:
  • 3D 模型:创建、导入和操作复杂的 3D 模型。
  • 灯光和阴影:支持多种灯光类型和复杂的阴影效果。
  • 材质和纹理:允许应用多种材质和纹理,为场景增加真实感。
  • 相机控制:轻松设置和操控 3D 场景中的相机视角。
  • 动画:支持对象动画,创建流畅的 3D 过渡效果。

构建你的第一个 Three.js 3D 场景

接下来,我们将使用 Three.js 创建一个简单的 3D 场景,包括一个旋转的立方体、一个光源和一个相机。

步骤 1:引入 Three.js

可以通过 CDN 直接引入 Three.js,也可以使用 npm 安装。

通过 CDN 引入:

<script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>

通过 npm 安装:

npm install three
步骤 2:创建基本的 Three.js 场景

在 HTML 文件中创建一个 ,用于显示 3D 内容。然后在 JavaScript 文件中初始化场景。

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Three.js 入门</title></head><body><canvas id="webgl-canvas"></canvas><script src="app.js"></script></body>
</html>
步骤 3:初始化场景、相机和渲染器

在 app.js 文件中编写代码,创建基本的场景、相机和渲染器。

import * as THREE from 'three';const canvas = document.getElementById('webgl-canvas');
const scene = new THREE.Scene();// 创建相机
const camera = new THREE.PerspectiveCamera(75,window.innerWidth / window.innerHeight,0.1,1000,
);
camera.position.z = 5;// 创建渲染器
const renderer = new THREE.WebGLRenderer({ canvas });
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
步骤 4:添加立方体

接下来,我们将创建一个立方体,并为其添加基础材质和颜色。

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

步骤 5:添加灯光

我们添加一个点光源,提升场景的光照效果。

const light = new THREE.PointLight(0xffffff, 1);
light.position.set(10, 10, 10);
scene.add(light);

步骤 6:渲染循环

最后,创建一个渲染循环,让立方体在场景中旋转起来。

function animate() {requestAnimationFrame(animate);// 让立方体旋转cube.rotation.x += 0.01;cube.rotation.y += 0.01;renderer.render(scene, camera);
}
animate();

完整代码

将以上代码整合,形成一个完整的 3D 场景应用。

import * as THREE from 'three';// 初始化场景
const canvas = document.getElementById("webgl-canvas");
const scene = new THREE.Scene();// 相机设置
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
camera.position.z = 5;// 渲染器设置
const renderer = new THREE.WebGLRenderer({ canvas });
renderer.setSize(window.innerWidth, window.innerHeight);// 创建几何体和材质
const geometry = new THREE.BoxGeometry();
const material = new THREE.MeshStandardMaterial({ color: 0x00ff00 });
const cube = new THREE.Mesh(geometry, material);
scene.add(cube);// 添加灯光
const light = new THREE.PointLight(0xffffff, 1);
light.position.set(10, 10, 10);
scene.add(light);// 动画循环
function animate() {requestAnimationFrame(animate);// 旋转立方体cube.rotation.x += 0.01;cube.rotation.y += 0.01;renderer.render(scene, camera);
}
animate();

展学习内容

使用 Three.js 创建的 3D 场景可以非常灵活,以下是一些可探索的进阶功能:

  • 材质和纹理:学习如何使用纹理贴图、透明度和环境光等效果,为对象添加更真实的材质。
  • 动画和物理效果:通过 Tween.js 等库实现平滑动画和物理模拟。
  • 交互控制:添加鼠标交互或使用 OrbitControls 控制相机视角,增强用户体验。
  • 导入 3D 模型:Three.js 支持加载 .obj、.glb 等 3D 模型,可以导入自定义模型为场景增色。

总结

Three.js 是一个强大、灵活的 3D 渲染库,能在浏览器中轻松创建互动 3D 场景。通过本文的内容,你应该能够了解并创建一个简单的 3D 场景。希望这篇文章帮助你快速入门 Three.js,享受 3D 开发的乐趣!

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

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

相关文章

C#界面设计--9--fatal error C1083: 无法打开包括文件:“jruparse.h”: No such file or directory

1、VS2008-编译时报错“fatal error C1083: 无法打开包括文件:“jruparse.h”: No such file or directory” 2、问题出现的原因及解决方法 1、如果要引入的这些,h文件跟.cpp在同一个目录下&#xff0c;就不会出现这种问题&#xff0c;检査在工程的include目录下是不是真的存…

算法:排序

排序算法 1. 简单排序1.1 直接插入排序1.2 冒泡排序1.3 简单选择排序 2. 希尔排序3. 快速排序4. 堆排序5. 归并排序 将文件的内容按照某种规则进行排列。 排序算法的稳定判定&#xff1a;若在待排序的一个序列中&#xff0c; R i R_i Ri​和 R j R_j Rj​的关键码相同&#xf…

14.2024.10.30

2024.10.30 2024.10.30 2024.10.30 学习和复习 从结构体引入类 碎碎念 ​ 感觉自己C语言结构体不太行&#xff0c;得加强复习一下。复盘一下开学这两个月的学习情况&#xff0c;查漏补缺。

OpenCV视觉分析之目标跟踪(6)轻量级目标跟踪器类TrackerNano的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 Nano 跟踪器是一个超轻量级的基于深度神经网络&#xff08;DNN&#xff09;的通用目标跟踪器。 由于特殊的模型结构&#xff0c;Nano 跟踪器速度…

【新人系列】Python 入门(六):基础内容 - 上

✍ 个人博客&#xff1a;https://blog.csdn.net/Newin2020?typeblog &#x1f4dd; 专栏地址&#xff1a;https://blog.csdn.net/newin2020/category_12801353.html &#x1f4e3; 专栏定位&#xff1a;为 0 基础刚入门 Python 的小伙伴提供详细的讲解&#xff0c;也欢迎大佬们…

LuaJIT源码分析(五)词法分析

LuaJIT源码分析&#xff08;五&#xff09;词法分析 lua虽然是脚本语言&#xff0c;但在执行时&#xff0c;还是先将脚本编译成字节码&#xff0c;然后再由虚拟机解释执行。在编译脚本时&#xff0c;首先需要对源代码进行词法分析&#xff0c;把源代码分解为token流。lua的toke…

Django+Vue全栈开发旅游网项目景点详情

一、VueRouter实现多个页面 VueRouter引入步骤&#xff1a; 1、了解Vue.js中的路由管理 2、掌握VueRouter的安装和配置 3、掌握在Vue.js中使用VueRouter 什么是路由 路由&#xff08;Routing&#xff09;是指在网络中&#xff0c;将数据包&#xff08;packet&#xff09;从…

零跑汽车嵌入式面试题汇总及参考答案

C++ 的三大特性是什么? C++ 的三大特性分别是封装、继承和多态。 封装 概念:封装是把数据和操作数据的函数绑定在一起,对数据的访问进行限制。通过将数据成员声明为私有或保护,只允许通过公共的成员函数来访问和修改数据,从而隐藏了类的内部实现细节。这有助于提高代码的安…

WPF+MVVM案例实战(七)- 系统初始化界面字体描边效果实现

文章目录 1、案例效果展示2、项目准备3、功能实现1、资源获取2、界面代码3、后台代码4 源代码获取1、案例效果展示 2、项目准备 打开项目 Wpf_Examples,新建系统初始化界面 WelcomeWindow.xmal,如下所示: 3、功能实现 1、资源获取 案例中使用的CSDN文字为路径文字,从字体…

crc16 with word byte--查表法

#1, BYTE CRC 参考&#xff1a; https://blog.csdn.net/m0_37697335/article/details/113267780?ops_request_misc%257B%2522request%255Fid%2522%253A%2522F1451286-1B97-44AA-A5FC-386045B4939B%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&reques…

开源Verilog EDA工具--iverilog+GTKWave

开源Verilog EDA工具--iverilogGTKWave 1 Linux下环境安装及编译2 bash脚本 iverilogvvpgtkwave的开源EDA工具&#xff0c;其中vpp已经包含在iverilog中&#xff1b;并且在Windows或者Linux下都有对应的版本&#xff1b; iverilog:用于编译verilog和vhdl文件&#xff0c;进行语…

MFC工控项目实例二十七添加产品参数

承接专栏《MFC工控项目实例二十六创建数据库》 在型号参数界面添加三个参数试验时间、最小值、最大值。变量为double m_edit_time; double m_edit_min; double m_edit_max; 1、在SEAL_PRESSURE.h中添加代码 class CProductPara { public:union{struct{...double m_edit_min;…

【02】ZooKeeper经典应用场景实战一

1、ZooKeeper Java客户端实战 ZooKeeper应用的开发主要通过Java客户端API去连接和操作ZooKeeper集群。可供选择的Java客户端API有&#xff1a; ZooKeeper官方的Java客户端API。第三方的Java客户端API&#xff0c;比如&#xff1a;Curator ZooKeeper官方的客户端API提供了基本的…

信息安全工程师(73)网络安全风险评估过程

一、确定评估目标 此阶段需要明确评估的范围、目标和要求。评估目标通常包括特定的网络系统、信息系统或网络基础设施&#xff0c;评估范围可能涉及整个组织或仅特定部门。明确评估要求有助于确保评估过程的针对性和有效性。 二、收集信息 在评估开始之前&#xff0c;需要对目标…

2024年10月23日Github流行趋势

项目名称&#xff1a;hiteshchoudhary / apihub 项目维护者&#xff1a;wajeshubham, atulbhatt-system32, jwala-anirudh, arnb-smnta, shrey-dadhaniya 项目介绍&#xff1a;您自己的API Hub&#xff0c;用于学习和掌握API交互。非常适合前端、移动开发人员和后端开发人员。 …

Vmos pro-虚拟机 解锁永久vip

[应用名称] 应用名称&#xff1a;Vmos pro [应用版本] 应用版本&#xff1a;2.99 [软件大小] 软件大小&#xff1a;32.2mb [应用简介] 应用简介&#xff1a;Vmos Pro这款安卓虚拟机平台&#xff0c;提供了多样化的ROM版本选择。用户可根据自身需求更换ROM&#xff0c;调…

华为OD机试 - 最多购买宝石数目 - 滑动窗口(Python/JS/C/C++ 2024 C卷 100分)

华为OD机试 2024E卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试真题&#xff08;Python/JS/C/C&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;私信哪吒&#xff0c;备注华为OD&#xff0c;加入华为OD刷题交流群&#xff0c;…

1:基本电路专题:R(电阻)的介绍

说实话这个其实我不想写的&#xff0c;因为这个是初中的知识&#xff0c;并没有很难&#xff0c;但是为了保持整齐性&#xff0c;我还是写了一下关于这个的知识点。是电子学中三大基本无源元件之一。&#xff08;R&#xff08;电阻&#xff09;,L&#xff08;电感&#xff09;,…

【每日一题】2020年考研数据结构 - 求最短三元组

本题要求我们在三个非空整数集合中各取一个元素构成三元组&#xff0c;使其具有最小的距离。 题目描述 定义三元组 ( ( a , b , c ) ) ((a, b, c)) ((a,b,c)) 的距离 ( D ∣ a − b ∣ ∣ b − c ∣ ∣ c − a ∣ ) (D |a - b| |b - c| |c - a|) (D∣a−b∣∣b−c∣∣…

基于SpringBoot的“CSGO赛事管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“CSGO赛事管理系统”的设计与实现&#xff08;源码数据库文档PPT) 开发语言&#xff1a;Java 数据库&#xff1a;MySQL 技术&#xff1a;SpringBoot 工具&#xff1a;IDEA/Ecilpse、Navicat、Maven 系统展示 系统首页界面图 赛事信息界面图 赛事通知界面…