初见threejs

发布时间 2023-12-28 20:53:55作者: 丁少华

threejs底层封装了强大的webGL技术,让开发者们可以开箱即用 (其实也并非开箱即用,还是挺麻烦的?)。
恰巧朋友遇到了些难题,借此契机,接触了下threejs。
官网是支持中文的,虽然翻译的很差,但寥胜于无。
这里还有个野生的中文文档,感兴趣的可以看看,毕竟也是某位开发者的一腔热血之作!

treejs紧紧围绕了渲染器(Renderer)、场景(Scene)、照相机(Camera),坐标系,物体,光照这些概念,熟悉3d建模或影视特效的人应该非常的熟悉!

下边我就从一个简单的例子,一点点深入。

我们创建一个场景,你可以理解为秀场。
然后再创建一个模型,你可以理解为模特。
最后让模型在场景中展示!

最简单的例子

创建场景

const scene = new THREE.Scene();

创建模型

在threejs中规定,创建模型分3部,具体如下

// 创建物体几何形状
const geometry = new THREE.BoxGeometry(0.4, 0.6, 0.8); // 参数为长宽高

// (基于上一步的几何形状)创建物体外观材质
const material = new THREE.MeshBasicMaterial();

// (基于上一步的外观材质)创建物体网格模型
const mesh = new THREE.Mesh(geometry, material);

创建摄像机

这是什么东西?!
其实也好理解,你自己本身就充当摄像机去看 秀场里的模特。
threejs一切围绕3d,那想了解3d,空间感是必须要有的。
而摄像机就是空间感的表达工具!

const camera = new THREE.PerspectiveCamera(30, width / height, 1, 3000);
camera.position.set(0.5, 0, 3); // 设置相机位置

一切就绪,开始展示

 // 创建场景 并将上边的内容都添加到场景中
const scene = new THREE.Scene();
scene.add(mesh);
scene.add(camera);
scene.add(axesHelper);

// 创建一个渲染器
const renderer = new THREE.WebGLRenderer();
renderer.setSize(width, height); //设置three.js渲染区域的尺寸(像素px)
renderer.render(scene, camera); //执行渲染操作

// 执行渲染命令并挂载到页面(会输出一个canvas画布,也就是一个HTML元素,你可以插入到web页面中)
const webglNode = document.querySelector(".webgl");
webglNode.appendChild(renderer.domElement);