【Three.js】知识梳理二:Three.js引用和环境搭建

news2024/11/20 7:25:09

1.文件包下载和目录简介

1.1 文件包下载

a. 官方网站下载: 访问 Three.js 的官方网站(threejs.org/)并点击 "Download" 按钮,下载最新版本的文件包。

b. GitHub仓库下载: 访问 Three.js 的 GitHub 仓库(github.com/mrdoob/thre…)并点击 "Code" 按钮,选择 "Download ZIP" 下载整个仓库。请注意,这种方式下载的文件包将包含一些额外的文件,如示例和文档。

c. 使用npm安装: 如果您更喜欢使用npm进行包管理,可以通过执行以下命令安装Three.js:

npm install three

npm安装后,如何引入three.js:

执行import * as THREE from 'three';,ES6语法引入three.js核心。

// 引入three.js
import * as THREE from 'three';

npm安装后,如何引入three.js其他扩展库:

除了three.js核心库以外,在threejs文件包中examples/jsm目录下,你还可以看到各种不同功能的扩展库。

一般来说,你项目用到那个扩展库,就引入那个,用不到就不需要引入。

// 引入扩展库OrbitControls.js
import { OrbitControls } from 'three/addons/controls/OrbitControls.js';
// 引入扩展库GLTFLoader.js
import { GLTFLoader } from 'three/addons/loaders/GLTFLoader.js';
// 扩展库引入——旧版本,比如122, 新版本路径addons替换了examples/jsm
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';

1.2 Three.js 目录简介

下载three.js文件包解压后,你可以看到如下目录(不同版本会略有差异)。

对于开发者而言,大家经常接触的是文档docs案例examples两个文件夹,平时查看文档,可以打开文档docs里面html文件,案例examples里面提供了海量threejs功能案例。

three.js-master
└───build——src目录下各个代码模块打包后的结果
    │───three.js——开发的时候.html文件中要引入的threejs引擎库,和引入jquery一样,可以辅助浏览器调试
    │───three.min.js——three.js压缩后的结构文件体积更小,可以部署项目的时候在.html中引入。
    │
└───docs——Three.js API文档文件
    │───index.html——打开该文件可以实现离线查看threejs API文档
    │
└───editor——Three.js的可视化编辑器,可以编辑3D场景
    │───index.html——打开应用程序
    │
└───docs——Three.js API文档文件
    │───index.html——打开该文件可以实现离线查看threejs API文档
    │
└───examples——里面有大量的threejs案例,平时可以通过代码编辑全局查找某个API、方法或属性来定位到一个案例
    │
└───src——Three.js引擎的各个模块,可以通过阅读源码深度理解threejs引擎
    │───index.html——打开该文件可以实现离线查看threejs API文档
    │
└───utils——一些辅助工具
    │───\utils\exporters\blender——blender导出threejs文件的插件

2. 环境搭建

2.1 创建一个HTML文件

首先,创建一个名为index.html的HTML文件。然后,在文件中添加以下基本HTML结构:

<!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>
  <style>
    body { margin: 0; }
    canvas { display: block; }
  </style>
</head>
<body>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/three.js/r128/three.min.js"></script>
  <script src="main.js"></script>
</body>
</html>

在这个HTML文件中,我们加载了Three.js库,并通过main.js文件链接了我们即将编写的脚本。

2.2 创建一个JavaScript文件

接下来,创建一个名为main.js的JavaScript文件。在这个文件中,我们将编写Three.js代码来创建一个基本的3D场景。

2.2.1 初始化Three.js

main.js文件中,添加以下代码以初始化Three.js:

// 创建一个场景
const scene = new THREE.Scene();
​
// 创建一个透视相机
const camera = new THREE.PerspectiveCamera(75, window.innerWidth / window.innerHeight, 0.1, 1000);
​
// 创建一个WebGL渲染器
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
document.body.appendChild(renderer.domElement);
​
// 添加窗口尺寸调整事件监听器
window.addEventListener('resize', function() {
  const width = window.innerWidth;
  const height = window.innerHeight;
  renderer.setSize(width, height);
  camera.aspect = width / height;
  camera.updateProjectionMatrix();
});

这段代码创建了一个场景、一个透视相机和一个WebGL渲染器。同时,我们还添加了一个事件监听器,用于处理窗口尺寸变化,以确保渲染的场景始终适应浏览器窗口大小。

2.2.2 添加一个立方体

接下来,我们将在场景中添加一个简单的立方体。将以下代码添加到main.js文件:

// 创建一个立方体几何体
const geometry = new THREE.BoxGeometry();
​
// 创建一个基本材质
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 });
​
// 创建一个立方体网格(Mesh)
const cube = new THREE.Mesh(geometry, material);
​
// 将立方体添加到场景中
scene.add(cube);
​
// 设置相机位置
camera.position.z = 5;

这段代码创建了一个立方体几何体、一个绿色的基本材质,并将它们组合成一个立方体网格。然后,我们将立方体添加到场景中,并设置相机的位置。

2.2.3 动画循环

为了让立方体动起来,我们需要创建一个动画循环。将以下代码添加到main.js文件:

// 动画循环函数
function animate() {
  requestAnimationFrame(animate);
​
  // 旋转立方体
  cube.rotation.x += 0.01;
  cube.rotation.y += 0.01;
​
  // 渲染场景
  renderer.render(scene, camera);
}
​
// 开始动画循环
animate();

这段代码定义了一个名为animate的函数,它使用requestAnimationFrame来实现动画循环。在每次循环中,我们旋转立方体,并使用渲染器渲染场景。

最后,在支持WebGL的浏览器中打开。你将看到一个旋转的绿色立方体。

image-20230509135024638.png

附送250套精选项目源码

源码截图

 源码获取:关注公众号「码农园区」,回复 【源码】,即可获取全套源码下载链接

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

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

相关文章

代码随想录算法训练营第36期DAY57

DAY57 今天的好消息&#xff1a;能去华五。 1143最长公共子序列 Code: class Solution {public: int longestCommonSubsequence(string text1, string text2) { vector<vector<int>> dp(text1.size()1,vector<int>(text2.size()1,0)); f…

LeetCode-day09-419. 甲板上的战舰

LeetCode-day09-419. 甲板上的战舰 题目描述示例示例1&#xff1a;示例2&#xff1a; 思路代码 题目描述 给你一个大小为 m x n 的矩阵 board 表示甲板&#xff0c;其中&#xff0c;每个单元格可以是一艘战舰 ‘X’ 或者是一个空位 ‘.’ &#xff0c;返回在甲板 board 上放置…

软件设计,建模及需求分析

文章目录 设计原则建模及需求分析UML画图工具原型图画图工具 重构 设计原则 SOLID原则 单一职责 开闭 &#xff08;扩展开放&#xff0c;修改关闭&#xff09; 里氏替换 &#xff08;父类出现地方都可以用子类替换&#xff09; 接口隔离 依赖倒置&#xff08;高层模块不依…

理解dispatch_async

Submits a block for asynchronous execution on a dispatch queue and returns immediately. 提交一个块以在调度队列上异步执行并立即返回。 code showing 以一个最简单的demo开始 // 创建一个同步队列 dispatch_queue_t syncQueue dispatch_queue_create("io.sqi.My…

CSS之块浮动

在盒子模型的基础上就可以对网页进行设计 不知道盒子模型的可以看前面关于盒子模型的内容 而普通的网页设计具有一定的原始规律,这个原始规律就是文档流 文档流 标签在网页二维平面内默认的一种排序方式,块级标签不管怎么设置都会占一行,而同一行不能放置两个块级标签 行级…

Java面试八股之子类可以从父类继承哪些内容

Java子类可以从父类继承哪些内容 Java子类可以从父类继承以下内容&#xff1a; 属性&#xff08;Fields/Variables&#xff09;&#xff1a; public&#xff1a;子类可以继承父类所有的public修饰的属性。 protected&#xff1a;子类可以继承父类所有的protected修饰的属性…

1052 卖个萌(测试点1,2)

solution 想要输出\需要用\\才能输出&#xff0c;即 cout << "Are you kidding me? \\/" << endl;测试点1&#xff0c;2&#xff1a;输入序号小于1的非法情况 #include<iostream> #include<string> #include<map> using namespace…

XX食品有限公司智能制造汇报材料(71页PPT)

材料介绍&#xff1a; 本食品有限公司为应对市场需求变化&#xff0c;提高生产效率与产品质量&#xff0c;降低运营成本&#xff0c;特制定此智能制造规划。本规划旨在通过引入先进的智能制造技术和管理模式&#xff0c;推动公司向数字化、网络化、智能化方向发展&#xff0c;…

强烈推荐!Windows 11 24H2 版本系统下载(新功能多多)

微软向 Windows 11 Version 24H2 用户推送了 KB5036908 更新&#xff0c;标志着 24H2 版本的首次累积更新&#xff0c;更新后用户的系统版本号将升级至 26100.268。在新版本中&#xff0c;最显著的变化包括对文件资源管理器的改进、整合的 Copilot 功能、编辑 PNG 文件元数据的…

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第38课-密室逃脱

【WEB前端2024】3D智体编程&#xff1a;乔布斯3D纪念馆-第38课-密室逃脱 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎&…

echarts的toolbox自定义feature标签及事件

1. 需求 在使用echarts图时希望toolbox扩展一些自定义icon和点击事件&#xff0c;而不只是图中这些echarts提供的事件。 2. 文档 属性名类型描述toolbox.featureObject各工具配置项。 feature中除了echarts提供的各个内置的工具按钮外&#xff0c;可以自定义工具按钮。 除…

矩阵练习2

48.旋转图像 规律&#xff1a; 对于矩阵中第 i行的第 j 个元素&#xff0c;在旋转后&#xff0c;它出现在倒数第i 列的第 j 个位置。 matrix[col][n−row−1]matrix[row][col] 可以使用辅助数组&#xff0c;如果不想使用额外的内存&#xff0c;可以用一个临时变量 。 还可以通…

ShardingSphere跨表查询报错

目录 一、场景简介二、报错信息三、SQL四、原因五、解决方法一、调整SQL&#xff0c;不使用子查询方法二、将子查询的SQL独立出来&#xff0c;后续连接逻辑由代码处理 一、场景简介 1、使用ShardingSphere按月份进行分表 2、单月查询正常&#xff08;单表&#xff09; 3、跨…

苹果AI一夜颠覆所有,Siri史诗级进化,内挂GPT-4o

苹果AI一夜颠覆所有&#xff0c;Siri史诗级进化&#xff0c;内挂GPT-4o 刚刚&#xff0c;苹果AI&#xff0c;正式交卷&#xff01; 今天&#xff0c;苹果构建了一个全新AI帝国——个人化智能系统Apple Intelligence诞生&#xff0c;智能助手Siri迎来诞生13年以来的史诗级进化…

visual studio 2022使用全版本平台工具集

https://www.cnblogs.com/coolfan/p/15822057.html vs2022使用全版本平台工具集 关键词&#xff1a;visual studio 2022使用全版本平台工具集;vs2022使用vc60、vc6.0工具集;vs2022使用全部旧平台工具集 优点&#xff1a;用v60平台工具集编译出来的exe文件可以无依赖的运行在W…

Spring--Bean的作用域,生命周期

Bean的作用域 Bean的作用域有很多种&#xff0c;在Spring Framework中支持6种&#xff08;其中有四种只有在web环境中才能生效&#xff09;&#xff0c;同时Spring还支持自定义Bean的范围。 Spring Framework中支持的6种范围&#xff1a; 作用域解释singleton每个Spring IoC…

Manav Garg:生成式人工智能时代的SaaS

随着Chatgpt推动的人工智能时代精神席卷全球&#xff0c;它将如何影响SaaS世界&#xff1f;SaaS创业公司将如何适应这个新时代&#xff1f; 新兴市场在哪里&#xff1f;虽然这种技术平台的转变将带来巨大的机会&#xff0c;但传统的印度SaaS剧本必须适应新的人工智能秩序。创始…

误操作全盘重新分区?数据恢复与防范策略全解析

一、全盘重新分区概述 全盘重新分区&#xff0c;指的是对硬盘或存储设备上的所有分区进行删除并重新创建新分区的操作。这一操作通常会导致原有分区中的数据被清除&#xff0c;给用户带来数据丢失的风险。在某些情况下&#xff0c;用户可能由于误操作或软件故障而进行了全盘重…

【ArcGISProSDK】OpenItemDialog打开文件对话框

打开单个文件 效果 代码 public async void OpenFunction() {// 获取默认数据库var gdbPath Project.Current.DefaultGeodatabasePath;OpenItemDialog openItemDialog new OpenItemDialog() { Title "打开要素文件",InitialLocation gdbPath,Filter ItemFilte…

2024军民两用智能装备技术展会:领略“5G边缘计算器”开启智能化数据处理新篇章

"占星者5G边缘计算器&#xff1a;开启智能化数据处理新篇章" 随着物联网和人工智能技术的迅猛发展&#xff0c;数据处理的需求日益增长&#xff0c;对计算设备的性能提出了更高的要求。在“2024年中国军民两用智能装备与通信技术产业展览会”上&#xff0c;占星者5G边…