作者:能豆子2014 | 来源:互联网 | 2023-09-24 16:11
前言
Three.js是基于原生WebGL封装运行的三维引擎,在所有WebGL引擎中,Three.js是国内文资料最多、使用最广泛的三维引擎。
项目引入
Three.js中文网
github链接查看所有目录:https://github.com/mrdoob/three.js
html文件引入three.js引擎
在.html文件中引入three.js就像引入其它.js文件一样直接引入即可。
three.js在线加载可以通过下面的URL地址去加载
.html文件中引入threejs文件之后,可以通过浏览器控制台F12验证是否成功引入,在.html文件引入three.js后可以通过THREE
访问所有的API。
// 如果返回的不是未定义,说明threejs成功引入
console.log('打印场景API',THREE.Scene);
项目介绍
说到Three.js是基于WebGL封装的API库,那就先介绍一下WebGL。
WebGL 是一种 3D 绘图标准,这种绘图技术标准允许把 Javascript 和 OpenGL ES 2.0 结合在一起,通过增加 OpenGL ES 2.0 的一个 Javascript 绑定,WebGL 可以为 HTML5 Canvas 提供硬件 3D 加速渲染,这样 Web 开发人员就可以借助系统显卡来在浏览器里更流畅地展示 3D 场景和模型了,还能创建复杂的导航和数据视觉化。显然,WebGL 技术标准免去了开发网页专用渲染插件的麻烦,可被用于创建具有复杂 3D 结构的网站页面,甚至可以用来设计 3D 网页游戏等等。
推荐理由
1、Three.js使得WebGL的使用更方便、快捷。
2、Three.js的中文文档比较全。
3、Three.js的Web3D应用使用广泛,包括物联网3D可视化、产品720在线预览、数据可视化、H5/微信小游戏、科教领域、机械领域、WebVR、家装室内设计相关、三维模型在线预览平台、室内逆向全景漫游平台等。
场景展示
1、实现过程说明
整个程序结构:
程序整个运行过程就是:场景——相机——渲染器
从实际生活中拍照角度或是使用三维渲染软件角度理解,立方体网格模型和光照组成了一个虚拟的三维场景,相机对象就像你生活中使用的相机一样可以拍照,只不过一个是拍摄真实的景物,一个是拍摄虚拟的景物,拍摄一个物体的时候相机的位置和角度需要设置,虚拟的相机还需要设置投影方式,当你创建好一个三维场景,相机也设置好,就差一个动作“咔”,通过渲染器就可以执行拍照动作。
2、使用案例
展示效果:
几何体Geometry
//创建一个立方体几何对象Geometry
var geometry = new THREE.BoxGeometry(100, 100, 100);
代码var box=new THREE.BoxGeometry(100,100,100);
通过构造函数THREE.BoxGeometry()
创建了一个长宽高都是100的立方体,通过构造函数名字BoxGeometry也能猜出这个构造函数的意义,利用new关键字操作构造函数可以创建一个对象, 这都是Javascript语言的基本知识,至于THREE.BoxGeometry()
构造函数具体是什么可以不用关心, 就像你使用前端使用JQuery库一样查找官方文档就可以,你可以把代码THREE.BoxGeometry(100,100,100)
中的第一个参数更改为为50,刷新浏览器查看数据更改后长方体的效果图,可以看到已经不是长宽高一样的立方体, 而是普通的长方体。
你也可以用下面一段代码代替上面的长方体代码,你会发现会渲染出来一个球体效果。
//创建一个球体几何对象
var geometry = new THREE.SphereGeometry(60, 40, 40);
材质Material
代码var material=new THREE.MeshLambertMaterial({color:0x0000ff});
通过构造函数THREE.MeshLambertMaterial()创建了一个可以用于立方体的材质对象, 构造函数的参数是一个对象,对象包含了颜色、透明度等属性,本案例中只定义了颜色color
,颜色属性值0x0000ff
表示蓝色,可以把颜色值改为0x00ff00
,可以看到是绿色的立方体效果, 这里使用的颜色值表示方法是16进制RGB三原色模型。使用过渲染类软件、设计过网页或者学习过图形学应该能知道RGB三原色模型,这里就不再详述。
光源Light
代码var point=new THREE.PointLight(0xffffff);
通过构造函数THREE.PointLight()创建了一个点光源对象,参数0xffffff
定义的是光照强度, 你可以尝试把参数更改为为0x444444
,刷新浏览器你会看到立方体的表面颜色变暗,这很好理解,实际生活中灯光强度变低了,周围的景物自然暗淡,three.js引擎对WebGL光照模型算法都进行了封装,不需要你了解计算机图形学, 可以直接使用调用three.js光源相关API直接创建一个光源对象,就像你使用普通的三维建模渲染软件一样,只是这里多了一个Javascript编程语言而已。
相机Camera
代码var camera = new THREE.OrthographicCamera(-s * k, s * k, s, -s, 1, 1000);
通过构造函数THREE.OrthographicCamera()创建了一个正射投影相机对象, 什么是“正射投影”,什么是“相机对象”,每个人的基础不一样,或许你不太理解,或许你非常理解,如果不清楚还是那句话,刚一开始不用深究,改个参数测试一下看看视觉效果你就会有一定的感性认识。 比如把该构造函数参数中用到的参数s,也就是代码var s = 200;
中定义的一个系数,可以把200更改为300,你会发现立方体显示效果变小,这很好理解,相机构造函数的的前四个参数定义的是拍照窗口大小, 就像平时拍照一样,取景范围为大,被拍的人相对背景自然变小了。camera.position.set(200, 300, 200);
和camera.lookAt(scene.position);
定义的是相机的位置和拍照方向,可以更改camera.position.set(200,300,200);
参数重新定义的相机位置,把第一个参数也就是x坐标从200更改为250, 你会发现立方的在屏幕上呈现的角度变了,这就像你生活中拍照人是同一个人,但是你拍照的位置角度不同,显示的效果肯定不同。这些具体的参数细节可以不用管, 至少你知道相机可以缩放显示三维场景、对三维场景的不同角度进行取景显示。
WebGL封装
从WebGL的角度来看,three.js提供的构造函数基本是对原生WebGL的封装,如果你有了WebGL的基础,在学习three.js的很多对象、方法和属性是很容易理解的。在three.js入门教程中不会去过多讲解WebGL的基础知识, 但是为了大家更好的理解three.js的很多命令,与three.js相关的WebGL API知识、GPU渲染管线的知识。图形学可能很多人会觉得比较难,其实主要是算法部分,大家先可以学习一些基本的WebGL知识,初学的时候尽量不关注算法,主要了解顶点数据处理的过程,GPU渲染管线的基本功能单元。实际的工作中如果不是开发3D引擎可能不会使用原生WebGL API,但是学习了这些之后,对于three.js的深度开发学习很有好处,如果你了解你WebGL知识,可以联系绘制函数drawArrays()
来理解渲染器的渲染操作方法render()
。
总结
此篇文章算是Three.js的入门,详细的使用可以看官网。随着时代的发展和VR技术的元宇宙的到来,使得3D的Web应用更加广泛和实用。