Three.js 全屏适配

提示词

PROMPT
1
使用 Three.js 实现全屏适配,监听窗口大小变化并更新渲染器和相机参数。

效果描述

这是一个展示如何实现全屏适配的示例,包括监听窗口大小变化和更新渲染器、相机参数。

效果特性

  • 全屏渲染:渲染器全屏显示
  • 窗口监听:监听窗口大小变化
  • 渲染器更新:更新渲染器尺寸
  • 相机更新:更新相机宽高比
  • 投影矩阵:更新相机投影矩阵
  • 自适应布局:自适应窗口大小

核心参数

参数 说明
几何体大小 10, 60, 100 XYZ 三方向大小
材质颜色 0xff0000 红色
坐标轴大小 150 AxesHelper 大小
相机位置 (200, 200, 200) 相机位置
观察位置 (0, 10, 0) 相机观察点

核心代码解析

创建场景和模型

JAVASCRIPT
1
2
3
4
5
6
const scene = new THREE.Scene();
const geometry = new THREE.BoxGeometry(10, 60, 100);
const material = new THREE.MeshBasicMaterial({ color: 0xff0000 });
const mesh = new THREE.Mesh(geometry, material);
mesh.position.set(0, 10, 0);
scene.add(mesh);

创建渲染器

JAVASCRIPT
1
2
3
4
const renderer = new THREE.WebGLRenderer();
renderer.setSize(window.innerWidth, window.innerHeight);
renderer.render(scene, camera);
document.body.appendChild(renderer.domElement);

窗口大小变化监听

JAVASCRIPT
1
2
3
4
5
6
7
8
9
10
window.onresize = function () {
    // 重置渲染器输出画布canvas尺寸
    renderer.setSize(window.innerWidth, window.innerHeight);
    // 全屏情况下:设置观察范围长宽比aspect为窗口宽高比
    camera.aspect = window.innerWidth / window.innerHeight;
    // 渲染器执行render方法的时候会读取相机对象的投影矩阵属性projectionMatrix
    // 但是不会每渲染一帧,就通过相机的属性计算投影矩阵(节约计算资源)
    // 如果相机的一些属性发生了变化,需要执行updateProjectionMatrix ()方法更新相机的投影矩阵
    camera.updateProjectionMatrix();
};

技术亮点

  1. 全屏适配:实现全屏渲染
  2. 窗口监听:监听窗口大小变化
  3. 渲染器更新:更新渲染器尺寸
  4. 相机更新:更新相机宽高比
  5. 投影矩阵:更新相机投影矩阵

调试技巧

  1. 窗口大小:调整窗口大小测试适配
  2. 宽高比:确保宽高比正确
  3. 投影矩阵:确保投影矩阵正确更新
  4. 渲染器尺寸:确保渲染器尺寸正确
  5. 相机参数:确保相机参数正确

扩展方向

  1. 动画循环:添加动画循环
  2. 控制器:添加轨道控制器
  3. 光源:添加光源
  4. 多个模型:添加多个模型
  5. 性能优化:优化渲染性能

本文档由 ThreeLab 编辑整理,如需转载,请注明出处。