threejs学习:三、Cameras

95 阅读3分钟

一、Camera

不应该直接使用它,但可以从它继承,以访问通用属性和方法。下面的一些类继承自Camera类

1、ArrayCamera

通过使用多个摄像机来多次渲染场景。每个相机将渲染画布的特定区域。你可以想象这看起来像老式的主机多人游戏,我们必须共享一个分屏。

2、StereoCamera

立体相机通过两个模仿眼睛的相机来渲染场景,以便创建我们所说的视差效果,将诱使你的大脑认为有深度。你必须有足够的设备,如VR头盔或红色和蓝色的眼镜来看到结果。

3、CubeCamera

用于获得面向每个方向(向前、向后、向左、向右、向上和向下)的渲染,以创建周围的渲染。您可以使用它来创建反射或阴影贴图的环境贴图。

4、OrthographicCamera ⭐

无论物体与相机的距离如何,它们都具有相同的大小 参数:

  • 在每个方向(左、右、上、下)可以看到的距离,而不是视场
  • near and far
// 由于画布不是正方形,left和right乘这个值aspectRatio,防止渲染区域适应矩形画布而被拉伸。
const aspectRatio = sizes.width / sizes.height
const camera = new THREE.OrthographicCamera(- 1 * aspectRatio, 1 * aspectRatio, 1, - 1, 0.1, 100)

5、PerspectiveCamera ⭐

透视相机(近大远小效果)

const camera = new THREE.PerspectiveCamera(75, sizes.width / sizes.height, 1, 100)

参数:

  • fov(field of view 视野角度 通常使用45到75)
  • Aspect ratio(看的这个范围的宽高比)
// 保存在一个对象中
const sizes = {
   width: 800,
   height: 600
}
  • near(近裁剪面)
  • far(远裁剪面)

near and far 尽量使用合理的值,只有在你需要的时候才增加

二、controls

1、DeviceOrientationControls

将自动检索设备方向,如果您的设备,操作系统和浏览器允许,并相应地旋转相机。如果你有合适的设备,你可以用它来创造沉浸式宇宙或虚拟现实体验。

2、FlyControls

可以像在宇宙飞船上一样移动相机。你可以在三个轴上旋转,前进或后退。

3、FirstPersonControls

FirstPersonControls与FlyControls类似,但具有固定的向上轴。你可以看到这就像一只飞翔的鸟,它不能做桶滚。虽然FirstPersonControls包含“第一人称”,但它并不像FPS游戏那样工作。

4、PointerLockControls

PointerLockControls使用JavaScript API中的指针锁。这个API隐藏游标,让它居中,并在mousemove事件回调中继续发送移动内容。有了这个API,你可以直接在浏览器中创建FPS游戏。虽然这个类听起来很有希望创建这种交互,但它只会在指针锁定时处理摄像机旋转。你必须自己处理摄像机位置和游戏物理。

5、OrbitControls ⭐

OrbitControls与我们在上一课中制作的控件非常相似。你可以用鼠标左键旋转一个点,用鼠标右键横向平移,用鼠标滚轮放大或缩小。

import { OrbitControls } from 'three/examples/jsm/controls/OrbitControls.js'
const controls = new OrbitControls(camera, canvas)

实例属性和方法:

  • target 这个属性是Vector3
controls.target.y = 2
controls.update()
  • enableDamping 启用阻尼

需要通过调用controls.update()在每一帧上更新控件

6、TrackballControls

TrackballControls就像OrbitControls一样,但在垂直角度方面没有限制。你可以继续旋转,即使场景颠倒,也可以用相机旋转。

7、TransformControls

TransformControls与相机没有任何关系。你可以用它给一个对象添加一个小玩意来移动那个对象。

8、DragControls

和TransformControls一样,DragControls与相机没有任何关系。你可以使用它来移动平面上的物体,面对着相机通过拖放它们。