Web 3D,从入门到入土
已实现功能
-
基础组件设置
- 渲染器:配置 WebGL 渲染器的各项参数,如抗锯齿、sRGB 输出编码、尺寸调整、设备像素比、背景颜色,并添加窗口 resize 事件监听。
- 相机:创建透视相机,设定视角、宽高比、近/远裁剪面距离,设置初始位置和更新投影矩阵。
- 灯光
- 环境光:添加全局环境光。
- 定向光:创建定向光,可调整颜色和强度。
- 场景
- 场景创建:初始化场景对象。
- 雾效:添加雾效,可调节雾的颜色、起始距离和结束距离。
- 交互功能
- OrbitControls:实现相机的旋转、平移、缩放交互。
- GUI 控制面板
- 光照控制:调整环境光和定向光的颜色和强度。
- 雾效控制:调整雾的颜色、起始距离和结束距离。
- 辅助工具
- 坐标轴辅助线
- 网格辅助
- 平面辅助
- 点光源辅助
- 聚光灯辅助
- 方向光辅助
- 相机辅助
-
3D模型加载
- 使用模型加载器(如
THREE.GLTFLoader、THREE.ObjectLoader)加载多种格式(.gltf,.glb,.obj,.fbx等)的 3D 模型。 - 对加载的模型进行位置、旋转、缩放和材质属性的调整。
- 使用模型加载器(如
-
动画与关键帧
- 定义并播放关键帧动画,利用
THREE.AnimationMixer和THREE.KeyframeTrack进行控制。 - 通过
THREE.AnimationClip、THREE.AnimationAction等 API 实现精细的动画管理。
- 定义并播放关键帧动画,利用
-
粒子系统
- 使用
THREE.Points或THREE.PointsMaterial创建粒子系统,实现诸如烟雾、火焰、星空、雪花等效果。 - 结合
THREE.ShaderMaterial和自定义着色器实现复杂的粒子效果。
- 使用
-
物理模拟
- 集成第三方物理引擎(如 Cannon.js 或 Ammo.js),使用对应的插件(如
THREE.CannonPhysics或THREE.AmmoPhysics)。 - 为场景对象添加物理属性,处理碰撞检测、重力、刚体动力学等。
- 集成第三方物理引擎(如 Cannon.js 或 Ammo.js),使用对应的插件(如
-
用户交互
- 实现除 OrbitControls 以外的交互方式,如射线拾取(
THREE.Raycaster)、鼠标拖拽旋转、触摸手势识别(如集成 Hammer.js)。 - 根据交互结果更新场景状态、触发特效或动画。
- 实现除 OrbitControls 以外的交互方式,如射线拾取(
-
音频与音效
- 添加背景音乐和空间化音效,利用
THREE.AudioListener、THREE.Audio、THREE.PositionalAudio。 - 使用
THREE.AudioLoader加载音频文件,并通过THREE.AudioAnalyser实现音频可视化。
- 添加背景音乐和空间化音效,利用
-
后期处理效果
- 使用
THREE.EffectComposer结合THREE.ShaderPass实现景深、模糊、色彩校正、噪点、像素化等后期处理效果。 - 利用
THREE.ShaderLib提供的着色器或编写自定义 GLSL 着色器实现独特的视觉效果。
- 使用
-
多视图与分屏显示
- 创建多个相机、渲染器和 canvas 元素,实现不同视角的并列显示或分屏布局。
- 使用
THREE.StereoCamera实现立体视图,或THREE.WebGLMultisampleRenderTarget提升抗锯齿效果。
待实现功能
- 性能优化
- 使用
THREE.LOD实现细节层次,根据相机距离自动切换模型的低模和高模版本。 - 采用
THREE.BufferGeometry、THREE.InstancedBufferGeometry、THREE.InstancedMesh优化相似对象的渲染。 - 利用
renderer.info监控渲染统计信息,据此调整渲染策略以降低 GPU 负荷。
- 使用

.png)
.png)
.png)
.png)