Skip to content

场景

场景

场景 就是 three.js 提供的一个地方,让你来放置任何你想放的物体,比如 对象、光源、物体等。

JavaScript
// 创建场景
const scene = new THREE.Scene()

属性:

属性描述
children返回场景中所有对象的列表,包括摄像机和光源
fog给场景添加雾化效果
overrideMaterial强制场景中的所有物体使用相同的材质

方法:

方法描述
add向场景中添加对象
remove将对象从场景中移除
traverse返回场景中的所有物体,包括场景自身
getObjectByName查找特定名字的对象
JavaScript
const geometry = new THREE.BoxGeometry(1, 1, 1)
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 })
const cube = new THREE.Mesh(geometry, material)
cube.name = "绿色正方形"

// 添加对象
scene.add(cube)

// 移除对象
setTimeout(() => {
  scene.remove(cube)
  renderer.render(scene, camera)
}, 1000)

// 返回场景中所有物体
scene.traverse(item => console.log(item))

// 查找特定名称的对象
scene.getObjectByName("绿色正方形")

雾化效果

fog 可以给场景添加雾化效果,远处的物体会被淡淡的隐藏。参考掘金博客

雾有两种方式创建:线性雾 和 指数雾。

JavaScript
const box = new THREE.BoxGeometry(1, 1, 100)
const material = new THREE.MeshBasicMaterial({ color: 0x00ff00 })
const cube = new THREE.Mesh(box, material)
scene.add(cube)

// 设置场景背景颜色
scene.background = new THREE.Color(0xffffff)
// 线性雾
scene.fog = new THREE.Fog(0xffffff, 0.1, 50)
// 指数雾
scene.fog = new THREE.FogExp2(0xffffff, 0.1)

相同材质

overrideMaterial 属性可以把当前场景中的物体材质,全部设置同一个材质。

JavaScript
const scene = new THREE.Scene()

// 所有物体全部设置为 白色
scene.overrideMaterial = new THREE.MeshLambertMaterial({ color: 0xffffff })

渲染器

渲染器(WebGLRenderer)就是通过 WebGL 将我们的物体渲染到浏览器中。

JavaScript
// 创建渲染器
const renderer = new THREE.WebGLRenderer()
// 设置尺寸大小
renderer.setSize(window.innerWidth, window.innerHeight)

document.body.appendChild(renderer.domElement)

页面自适应

默认情况下,页面是不带有页面自适应的,当浏览器屏幕缩小或放大的时候,会有白边出现,可以通过添加浏览器 onSize 事件,更新相机和渲染器尺寸来解决。

JavaScript
function onResize() {
  // 调整渲染器的大小以填充整个窗口
  renderer.setSize(window.innerWidth, window.innerHeight)
  // 更新相机的纵横比以反映窗口大小的变化
  camera.aspect = window.innerWidth / window.innerHeight
  // 更新相机的投影矩阵以应用新的纵横比
  camera.updateProjectionMatrix()
}

window.addEventListener("resize", onResize)

全屏/退出全屏

JavaScript
// 全屏
const openFullScreen = () => renderer.domElement.requestFullscreen()

// 退出全屏,默认使用 ESC 也可以退出
const exitFullScreen = () => document.exitFullscreen()

Released under the MIT License.