11. Three.js 中的 AmbientLight(环境光)详解

本文适用于 Three.js 初学者与进阶开发者,深入了解 THREE.AmbientLight 的用法、原理和最佳实践,最后还会给出一个基于 Vue 3 Composition API 的真实代码案例。


🌟 什么是 AmbientLight(环境光)?

THREE.AmbientLight 是一种全局光源,它会均匀地照亮整个场景中的所有物体,没有方向性、不会产生阴影,是最基础也最常用的光源之一。

✅ 特点:
  • 没有位置(无方向性)

  • 不会产生阴影

  • 整体照亮所有物体(不会突出立体感)

  • 通常与其他光源(如 DirectionalLight、PointLight)配合使用


🧪 创建语法

const light = new THREE.AmbientLight(color, intensity); 
scene.add(light);

⚙️ 参数说明

参数类型说明
colorColor / Number / String光的颜色,默认 0xffffff
intensityNumber光照强度,默认 1,可设置为任意正数,0 为无光照

示例:

const ambient = new THREE.AmbientLight(0x404040); // 柔和白光 
scene.add(ambient);

🧠 使用技巧与建议

  • 通常用来“提亮整体场景”

  • 不建议单独使用(会导致模型显得“平面”)

  • 常与 DirectionalLightPointLight 搭配,提供基础光照

配合使用建议:

const ambient = new THREE.AmbientLight(0x404040, 1.5); 
const directional = new THREE.DirectionalLight(0xffffff, 0.8); 
scene.add(ambient, directional);

❗ 与其他光源的区别

光源类型是否投影是否有方向用途
AmbientLight提供基础全局照明
DirectionalLight类似太阳光,有阴影
PointLight✅ (点发散)类似灯泡,有范围和衰减
SpotLight✅ (锥形)舞台聚光灯,照射区域可控

📸 效果对比图

你可以使用以下代码观察效果差异:

// 仅环境光 
scene.add(new THREE.AmbientLight(0xffffff, 1.2)); 
// 无光 
// scene 不添加任何光源

🧩 Vue 3 + Composition API 使用示例

我们用 Vue 3 + Three.js 搭建一个简单的场景,加入 AmbientLight。

📁 依赖准备(假设使用 Vite 构建)
npm install three
📄 示例代码:AmbientLightScene.vue
<template>
  <div ref="container" class="w-full h-full"></div>
</template>

<script setup>
import { onMounted, ref } from 'vue'
import * as THREE from 'three'

const container = ref(null)

onMounted(() => {
  const scene = new THREE.Scene()

  const camera = new THREE.PerspectiveCamera(
    75,
    container.value.clientWidth / container.value.clientHeight,
    0.1,
    1000
  )
  camera.position.z = 5

  const renderer = new THREE.WebGLRenderer({ antialias: true })
  renderer.setSize(container.value.clientWidth, container.value.clientHeight)
  container.value.appendChild(renderer.domElement)

  // 添加几何体
  const geometry = new THREE.BoxGeometry()
  const material = new THREE.MeshStandardMaterial({ color: 0x007bff })
  const cube = new THREE.Mesh(geometry, material)
  scene.add(cube)

  // 添加 AmbientLight 环境光
  const ambientLight = new THREE.AmbientLight(0xffffff, 1.2)
  scene.add(ambientLight)

  // 添加 DirectionalLight 更有立体感
  const directionalLight = new THREE.DirectionalLight(0xffffff, 0.5)
  directionalLight.position.set(5, 5, 5)
  scene.add(directionalLight)

  const animate = () => {
    requestAnimationFrame(animate)
    cube.rotation.x += 0.01
    cube.rotation.y += 0.01
    renderer.render(scene, camera)
  }

  animate()
})
</script>

<style scoped>
div {
  width: 100%;
  height: 100vh;
  background: #000;
}
</style>

🧭 总结

  • THREE.AmbientLight 是基础却不可或缺的光源

  • 提供全局均匀照明,但不支持阴影

  • 通常作为辅助光源,与其他光源结合使用效果更佳

  • 在 Vue 3 项目中非常易用,可组合其它光源构建真实感场景


📚 后续推荐阅读(系列文章)

  • 【已发布】Three.js Light 光源总览 🎨

  • 【本篇】AmbientLight 环境光详解(你正在阅读)

  • 【即将上线】DirectionalLight 平行光详解

  • 【即将上线】PointLight 点光源详解

  • 【即将上线】SpotLight 聚光灯详解

  • ...

👉 欢迎收藏 + 关注,第一时间获取系列更新!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

吉檀迦俐

你的鼓励奖是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值