【Three.js】Three.js快速上手教程

这篇具有很好参考价值的文章主要介绍了【Three.js】Three.js快速上手教程。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. Three.js简介

官网对 Three.js 的介绍非常简单:“Javascript 3D library”。
即:three.jsJavaScript编写的WebGL第三方库。提供了非常多的3D显示功能,是一个常见的web 3D库。

相关概念解释:three.js > webGL > openGL

  • openGL 是一个跨平台3D/2D的绘图标准,webGL 则是openGL 在浏览器上的一个实现。
  • web前端开发人员可以直接用WebGL 接口进行编程,但 webGL 只是非常基础的绘图API,需要编程人员有很多的数学知识、绘图知识才能完成3D编程任务,而且代码量巨大。
  • three.jsWebGL 进行了封装,让前端开发人员在不需要掌握很多数学知识和绘图知识的情况下,也能够轻松进行web 3D开发,降低了门槛,同时大大提升了效率。

总结来一句话: 就是你不懂计算机图形学,只要理解了three.js的一些基本概念你也可以快速上手web 3D

1.1 官网首页

https://threejs.org/
由于是国外网站,可能加载有点慢,(可以尝试科学加速…)
three.module.js,three.js,three.js,javascript,3d,webgl

1.2 官网资源的本地化配置

由于3D资源较大,还有访问有时候会较慢,并且为了方便查看源码,我们可以从github上直接glone到本地启动。
three.js官方资源地址:https://github.com/mrdoob/three.js/

git clone https://github.com/mrdoob/three.js.git

three.module.js,three.js,three.js,javascript,3d,webgl
克隆到本地之后,使用vscode导入项目,你可以看到如下目录,不同版本会略有差异。

three.js
└───build——src目录下各个代码模块打包后的结果
    │───three.js——开发的时候.html文件中要引入的threejs引擎库,和引入jquery一样,可以辅助浏览器调试
    │───three.min.js——three.js压缩后的结构文件体积更小,可以部署项目的时候在.html中引入。
    │───three.module.js—— 可以import方式引入
    │
└───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文件的插件

three.module.js,three.js,three.js,javascript,3d,webgl
安装依赖包

cnpm install

启动项目

npm run dev

启动后可以看到如下页面,点击docs就可以看到文档
three.module.js,three.js,three.js,javascript,3d,webgl
three.module.js,three.js,three.js,javascript,3d,webgl
three.module.js,three.js,three.js,javascript,3d,webgl

2. 快速开始示例

我将通过一个demo快速讲解three.js的主要概念

2.1 引入three.js

使用three.js的第一步首先就是先把three.js引入到你的项目文件中。

2.1.1 script标签方式引入three.js

你可以像平时开发web前端项目一样,把three.js当做一个js库引入你的项目。

<script src="../../three.js/build/three.js"></script>
//随便输入一个API,测试下是否已经正常引入three.js
console.log(THREE.Scene); 

2.1.2 ES6 import方式引入

给script标签设置type="module",也可以在.html文件中使用import方式引入three.js。

如果你没有前端ES6基础,可以自行补充学习。

<script type="module">
// 现在浏览器支持ES6语法,自然包括import方式引入js文件
import * as THREE from '../../three.js/build/three.module.js';
</script>

2.1.3 three.js工程化开发

平时学习,为了方便可以直接在.html文件中引入three.js相关文件,不过在正式开发的时候,你可以在你的nodejs工程文件中,通过npm命令行安装three.js

npm安装

npm install three --save

# 特定版本three.js
# 139版本
npm install three@0.139.0 --save
// 引入three.js
import * as THREE from 'three';

// 和在.html文件中一样使用threejs类
var geo = new THREE.PlaneGeometry(105,209);
// 扩展库引入和使用
import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js';

const controls = new OrbitControls(camera, renderer.domElement);

2.2 创建三维场景

2.2.1 三维场景Scene

你可以Scene它理解为虚拟的3D场景,用来表示模拟生活中的真实三维场景,或者说三维世界。

// 创建3D场景对象Scene
var scene = new THREE.Scene();

2.2.2 给场景添加物体

你可以把网格模型Mesh理解为一个虚拟的物体,用来表示生活中真实的物体,比如一个箱子、一个鼠标。

//创建一个长方体几何对象Geometry
var geometry = new THREE.BoxGeometry(100, 100, 100); 
//材质对象Material(受光照影响的材质)
var material = new THREE.MeshLambertMaterial({
    color: 0x00ffff,//设置材质颜色
}); 
//创建网格模型对象Mesh
var mesh = new THREE.Mesh(geometry, material); 
//网格模型mesh添加到场景scene中
scene.add(mesh);  

2.3 相机和渲染器

经过上面的代码还无法在网页中看到生成的长方体,还需要借助相机camera和渲染器renderer把虚拟的三维场景Scene渲染出来。

three.js想把三维场景Scene呈现在web页面上,其实就像你生活中拍照一样,首先要有一个相机,然后还有你,你拿着相机,按一下,咔,完成拍照,获得照片。
three.module.js,three.js,three.js,javascript,3d,webgl

2.3.1 透视投影相机PerspectiveCamera

// width和height用来设置Three.js输出的Canvas画布尺寸(像素px)
var width = 800; //宽度
var height = 500; //高度
/**
 * 透视投影相机设置
 */
// 30:视场角度, width / height:Canvas画布宽高比, 1:近裁截面, 3000:远裁截面
var camera = new THREE.PerspectiveCamera(30, width / height, 1, 3000);
camera.position.set(292, 223, 185); //相机在Three.js三维坐标系中的位置
camera.lookAt(0, 0, 0); //相机观察目标指向Three.js坐标系原点

2.3.2 WebGL渲染器WebGLRenderer

/**
 * 创建渲染器对象
 */
var renderer = new THREE.WebGLRenderer();
renderer.setSize(width, height); //设置three.js渲染区域的尺寸(像素px)
renderer.render(scene, camera); //执行渲染操作
//three.js执行渲染命令会输出一个canvas画布,也就是一个HTML元素,你可以插入到web页面中
document.body.appendChild(renderer.domElement);

2.4 添加光源

/**
 * 光源设置
 */
//点光源
var pointLight = new THREE.PointLight(0xffffff,1.0);
pointLight.position.set(400, 200, 300); //点光源位置
scene.add(pointLight); //点光源添加到场景中
//环境光
var ambient = new THREE.AmbientLight(0xffffff,0.4);
scene.add(ambient); //环境光源添加到场景中

2.5 最终效果

three.module.js,three.js,three.js,javascript,3d,webgl

3. 完整代码

<script type="module">
    import * as THREE from '../../../three.js/build/three.module.js'
    /**
     * 创建3D场景对象Scene
     */
    var scene = new THREE.Scene();
    /**
     * 创建网格模型
     */
    //创建一个长方体几何对象Geometry
    var geometry = new THREE.BoxGeometry(100, 100, 100);
    //材质对象Material
    var material = new THREE.MeshLambertMaterial({
        color: 0x0000ff, //设置材质颜色
    });
    var mesh = new THREE.Mesh(geometry, material); //网格模型对象Mesh
    scene.add(mesh); //网格模型添加到场景中

    /**
     * 光源设置
     */
    //点光源
    var pointLight = new THREE.PointLight(0xffffff,1.0);
    pointLight.position.set(400, 200, 300); //点光源位置
    scene.add(pointLight); //点光源添加到场景中
    //环境光
    var ambient = new THREE.AmbientLight(0xffffff,0.4);
    scene.add(ambient);

    // width和height用来设置Three.js输出的Canvas画布尺寸(像素px)
    var width = 800; //宽度
    var height = 500; //高度
    /**
     * 透视投影相机设置
     */
    // 30:视场角度, width / height:Canvas画布宽高比, 1:近裁截面, 3000:远裁截面
    var camera = new THREE.PerspectiveCamera(30, width / height, 1, 3000);
    camera.position.set(292, 223, 185); //相机在Three.js三维坐标系中的位置
    camera.lookAt(0, 0, 0); //相机观察目标指向Three.js坐标系原点
    /**
     * 创建渲染器对象
     */
    var renderer = new THREE.WebGLRenderer();
    renderer.setSize(width, height); //设置three.js渲染区域的尺寸(像素px)
    renderer.render(scene, camera); //执行渲染操作
    //three.js执行渲染命令会输出一个canvas画布,也就是一个HTML元素,你可以插入到web页面中
    document.body.appendChild(renderer.domElement);
</script>

4. 总结

three.module.js,three.js,three.js,javascript,3d,webgl

  1. 创建3D场景对象Scene
  2. 创建网格模型对象
  3. 光源设置
  4. 透视投影相机对象设置
  5. 创建渲染器对象
    three.module.js,three.js,three.js,javascript,3d,webgl

📢欢迎点赞👍/ 收藏⭐/ 留言📝如有错误敬请指正!
未完待续…文章来源地址https://www.toymoban.com/news/detail-794996.html

到了这里,关于【Three.js】Three.js快速上手教程的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • three.js添加3d模型

    three官方的几何体也就那么几个,想要生成各种各样的模型,其难度十分之大,这时引入外部模型也不失为一种选择。具体引入办法如下。 虽然名字为GLTFLoader,但实际上glb文件也是能加载的。 其中需要注意的是调节相机参数与相机位置,否则很有可能导致场景中看不见任何东

    2024年02月04日
    浏览(92)
  • Three.js3D可视化介绍,以及本地搭建three.js官网

    一、什么是Three.js three.js官网 :https://threejs.org/ Three.js 是一个基于 WebGL 的 JavaScript 3D 图形库,它可以轻松地在浏览器中 创建3D场景和动画 。同时,它支持外部模型和纹理的导入,让开发者可以更加便捷地创建出震撼的 3D场景 。 Three.js 的应用场景非常广泛,主要包括以下几个

    2024年02月09日
    浏览(79)
  • 【three.js / React-three-fiber】加载3D模型性能优化

    无论是大型虚拟世界还是简单的网站,性能优化都是必要的。 特别是在运用三维模型的情况下,我们需要更加深入的优化。因为 三维模型通常包含大量的数据和复杂的几何形状 ,如果不进行性能优化,浏览器可能会因为负载过重而崩溃。 在本文中,我们将探讨如何在 thre

    2024年02月02日
    浏览(49)
  • Three.js之创建3D场景

    【G】Three.js官方文档:https://threejs.org/docs/ Three.js是一个流行的WebGL库,官方文档提供了详细的API参考和示例,适合学习和参考。 【G】Three.js GitHub链接:https://github.com/mrdoob/three.js 这是一个流行的基于WebGL的3D图形库,提供了丰富的功能和工具,用于创建交互式的3D场景和应用。

    2024年02月14日
    浏览(81)
  • Three.js中的3D文字效果

    对于一些设计网页中经常会出现一些3D的文字效果,本文将利用Three.js实现各种动画WebGL文本输入效果。 示例效果 原文章 通常情况下,文本网格是2D的平面形状,我们所要实现的3D文本形状则是要在2D的平面下,再生成z值形成一个立体的效果。 首先,我们创建一个canvas元素,

    2024年02月02日
    浏览(102)
  • Three.js 3D建模必备基础

    在 three.js 中,可见对象由几何体和材质构成。 我们已经了解了如何创建适用于点和线图元的简单几何图形,并且遇到了各种标准网格几何图形,例如 THREE.CylinderGeometry 和 THREE.IcosahedronGeometry。 在本节中,我们将了解如何从头开始创建新的网格几何体。 我们还将了解 three.js

    2023年04月09日
    浏览(37)
  • three.js 载入 3D 模型的方法

    three.js 载入 3D 模型的方法有很多种。以下是其中的一些: 1. OBJLoader模型加载器 2. GLTFLoader模型加载器 3. FBXLoader模型加载器 4. ColladaLoader模型加载器 以上是几种常用类型的三维模型的加载器及其使用方法,可以根据需要使用相应的模型加载器来加载模型。

    2024年02月16日
    浏览(60)
  • 【案例】3D地球(vue+three.js)

    需要下载插件 有人找不到合适的地球平面图的话,可直接地球平面图

    2024年02月06日
    浏览(41)
  • three.js 3D可视化地图

    threejs地图 可视化地图——three.js实现 地图数据的加载渲染

    2024年02月20日
    浏览(57)
  • Three.js--》实现3d字体模型展示

    目录 项目搭建 初始化three.js基础代码 设置环境纹理 加载字体模型 今天简单实现一个three.js的小Demo,加强自己对three知识的掌握与学习,只有在项目中才能灵活将所学知识运用起来,话不多说直接开始。 项目搭建 本案例还是借助框架书写three项目,借用vite构建工具搭建vue项

    2024年02月07日
    浏览(77)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包