From b3b2d16ca5d54a8941b6ea6db95f17f368ca0107 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E7=81=8C=E7=B3=96=E5=8C=85=E5=AD=90?= Date: Sun, 3 Apr 2022 23:39:22 +0800 Subject: [PATCH] =?UTF-8?q?Three.js=E5=88=9D=E8=A7=81(1)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- images/前端杂烩/three.js/材质与光源.png | Bin 0 -> 34592 bytes images/前端杂烩/three.js/辅助坐标系.png | Bin 0 -> 5619 bytes source/_posts/前端杂烩/Three.js初见.md | 185 ++++++++++++++++++++++++ 3 files changed, 185 insertions(+) create mode 100644 images/前端杂烩/three.js/材质与光源.png create mode 100644 images/前端杂烩/three.js/辅助坐标系.png create mode 100644 source/_posts/前端杂烩/Three.js初见.md diff --git a/images/前端杂烩/three.js/材质与光源.png b/images/前端杂烩/three.js/材质与光源.png new file mode 100644 index 0000000000000000000000000000000000000000..717d815a85d2994028105611533d230db3c1bd4c GIT binary patch literal 34592 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 literal 0 HcmV?d00001 diff --git a/images/前端杂烩/three.js/辅助坐标系.png b/images/前端杂烩/three.js/辅助坐标系.png new file mode 100644 index 0000000000000000000000000000000000000000..0fb2dcebe294e48d55c3708ac53d121e25bf979d GIT binary patch literal 5619 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 HRr&t}s?or9 literal 0 HcmV?d00001 diff --git a/source/_posts/前端杂烩/Three.js初见.md b/source/_posts/前端杂烩/Three.js初见.md new file mode 100644 index 0000000..e6c8b8f --- /dev/null +++ b/source/_posts/前端杂烩/Three.js初见.md @@ -0,0 +1,185 @@ +--- +title: Three.js初见(1) +date: 2022-04-03 10:54:35 +tags: + - 前端 + - Three.js +categories: + - 前端杂烩 +--- + +Three.js是基于原生WebGL封装运行的三维引擎,在所有WebGL引擎中,Three.js是国内文资料最多、使用最广泛的三维引擎。 + + + +## 页面结构 +```html + + + + + Three.js DEMO + + + + + + + +``` + +在脚手架项目当中 +也可以使用`npm install three`来添加依赖 + +## Hello World +index.js +```javascript +(function(){ +// 创建场景 +const scene = new THREE.Scene() + +// 创建相机 +// 1.视野角度 2.长宽比 3.远剪切面 4.近剪切面 +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) +// 将canvas添加到页面当中 +document.body.appendChild(renderer.domElement) + +// 创建一个立方体 +const geometry = new THREE.BoxGeometry(1, 1, 1) +// 创建材质 +const material = new THREE.MeshBasicMaterial({ color: 0x92d667 }) +// 创建网格, 可以将材质和立方体放入其中 +// 网格可以直接放入场景中, 并让它在场景中自由移动 +const cube = new THREE.Mesh(geometry, material) +scene.add(cube) + +// 将摄像机向外移动一些 防止与物体重叠 +camera.position.z = 5 + +// 使用渲染器 渲染到场景当中 +renderer.render(scene, camera) +})() + +``` + +> 添加到场景中的几何体默认位于场景的坐标原点(0, 0, 0) + +### 添加多个几何体 +```javascript +// 圆柱网格模型 +const geometry2 = new THREE.CylinderGeometry( 8, 8, 8, 100 ) +const material2 = new THREE.MeshBasicMaterial({ color: 0x92d667 }) +const mesh2 = new THREE.Mesh(geometry2, material2) +mesh2.translateY(20) // 向Y轴正方向移动20 +scene.add(mesh2) +``` +为防止几何体重叠无法看到, 可以调整网格的位置 + +### 循环渲染 +上面的代码, 已经可以显示出一个立方体 +如果要让它有一个动画效果 +需要改变网格的旋转 +并且进行循环渲染 + +```javascript +// 循环渲染 +function animate() { + requestAnimationFrame(animate) + cube.rotation.x += 0.01 + cube.rotation.y += 0.01 + renderer.render(scene, camera) +} +animate() +``` +`requestAnimationFrame`主要的好处是当前页面隐藏时不会进行渲染 +如果是使用定时器 +那么它在后台也会一直执行, 占用的资源比较多 +其次是它执行的频率由屏幕刷新率决定, 效果可以更加流畅 + + +## 场景控制 +要使用鼠标或键盘控制三维场景, 可以使用`OrbitControls`控件 +首先引入它 +```html + +``` +调用方式 +```javascript +// 创建控件对象 +const controls = new THREE.OrbitControls(camera, renderer.domElement) +// 监听鼠标、键盘事件 +controls.addEventListener('change', function(){ + renderer.render(scene, camera) +}) +``` + +场景操作 + ++ 缩放:滚动—鼠标中键 ++ 旋转:拖动—鼠标左键 ++ 平移:拖动—鼠标右键 + +> 如果代码中通过`requestAnimationFrame`实现渲染器渲染方法`render`的周期性调用,当通过OrbitControls操作改变相机状态的时候,没必要在通过`controls.addEventListener('change', render)`监听鼠标事件调用渲染函数,因为`requestAnimationFrame`就会不停的调用渲染函数。 + +## 辅助坐标系 + +为了方便调试预览threejs提供了一个辅助三维坐标系`AxesHelper` + +```javascript +// 辅助坐标系 参数代表轴的线段长度,可以根据场景大小去设置 +const axesHelper = new THREE.AxesHelper(100); +scene.add(axesHelper); +``` +![辅助坐标系](/images/前端杂烩/three.js/辅助坐标系.png) + +> 红色代表 X 轴, 绿色代表 Y 轴, 蓝色代表 Z 轴 + +## 材质与光源 +除了基本的材质类型之外, three还提供了多种材质效果 + +| 材质类型 | 功能 | +| -- | -- | +| MeshBasicMaterial | 基础网格材质,不受光照影响的材质 | +| MeshLambertMaterial | Lambert网格材质,与光照有反应,漫反射 | +| MeshPhongMaterial | 高光Phong材质,与光照有反应 | +| MeshStandardMaterial | PBR物理材质,相比较高光Phong材质可以更好的模拟金属、玻璃等效果 | + +```javascript +// 创建一个球体 +const geometry1 = new THREE.SphereGeometry(6, 40, 40) +const material1 = new THREE.MeshPhongMaterial({ + color: 0x0000ff, + specular: 0x4488ee, // 高光颜色 + shininess: 12, // 高亮程度 +}) +const mesh1 = new THREE.Mesh(geometry1, material1) +scene.add(mesh1) + +// 创建一个圆柱 +const geometry2 = new THREE.CylinderGeometry( 8, 8, 8, 100 ) +const material2 = new THREE.MeshLambertMaterial({ + color: 0xffffff, +}) +const mesh2 = new THREE.Mesh(geometry2, material2) +mesh2.translateY(20) // 向Y轴正方向移动20 +scene.add(mesh2) +``` + +`MeshLambertMaterial`和`MeshPhongMaterial`都是对光照有反应的 +但是此时我们还需要添加一个光源, 才能看到效果 + +```javascript +// 点光源 +const pointLight = new THREE.PointLight(0xffffff) +pointLight.position.set(100, 100, 0) // 点光源位置 +scene.add(pointLight) // 点光源添加到场景中 +``` + +![材质与光源](/images/前端杂烩/three.js/材质与光源.png) \ No newline at end of file