PerspectiveCamera - Verge3D 用户手册 - Soft8Soft
Description: 了解如何在使用 Verge3D 制作的交互式 3D 应用程序中使用 PerspectiveCamera

Object3D → Camera →

# 透视相机（PerspectiveCamera）

这一摄影机使用perspective projection（透视投影）来进行投影。
这一投影模式被用来模拟人眼所看到的景象，它是3D场景的渲染中使用得最普遍的投影模式。

## 代码示例

`const camera = new v3d.PerspectiveCamera(45, width / height, 1, 1000); app.scene.add(camera);`

## 构造函数

### PerspectiveCamera(fov : Number, aspect : Number, near : Number, far : Number)

fov — 摄影机视锥体垂直视野角度
aspect — 摄影机视锥体长宽比
near — 摄影机视锥体近端面
far — 摄影机视锥体远端面
这些参数一起定义了摄影机的viewing frustum（视锥体）。

## 属性

共有属性请参见其基类 Camera 。
请注意，在大多数属性发生改变之后，你将需要调用.updateProjectionMatrix来使得这些改变生效。

### # .aspect : Float

摄影机视锥体的长宽比，通常是使用画布的宽/画布的高。默认值是1（正方形画布）。

### # .far : Float

摄影机的远端面，默认值是2000。
该值必须大于near plane（摄影机视锥体近端面）的值。

### # .filmGauge : Float

胶片尺寸，其默认值为35（毫米）。 这个参数不会影响摄影机的投影矩阵，除非.filmOffset被设置为了一个非零的值。

### # .filmOffset : Float

水平偏离中心偏移量，和.filmGauge单位相同。默认值为0。

### # .focus : Float

用于立体视觉和景深效果的物体的距离。 这个参数不会影响摄影机的投影矩阵，除非使用了StereoCamera。 默认值是10。

### # .fov : Float

摄影机视锥体垂直视野角度，从视图的底部到顶部，以角度来表示。默认值是50。

### # .near : Float

摄影机的近端面，默认值是0.1。
其有效值范围是0到当前摄影机far plane（远端面）的值之间。 请注意，和OrthographicCamera不同，0对于PerspectiveCamera的近端面来说不是一个有效值。

### # .view : Object

Frustum window specification or null. 这个值使用.setViewOffset方法来进行设置，使用.clearViewOffset方法来进行清除。

### # .zoom : number

获取或者设置摄影机的缩放倍数，其默认值为1。

## 方法

共有方法请参见其基类Camera。

### # .clearViewOffset() → null

清除任何由.setViewOffset设置的偏移量。

### # .getEffectiveFOV() → Float

结合.zoom（缩放倍数），以角度返回当前垂直视野角度。

### # .getFilmHeight() → Float

返回当前胶片上图像的高，如果.aspect小于或等于1（肖像格式、纵向构图），则结果等于.filmGauge。

### # .getFilmWidth() → Float

返回当前胶片上图像的宽，如果.aspect大于或等于1（景观格式、横向构图），则结果等于.filmGauge。

### # .getFocalLength() → Float

返回当前.fov（视野角度）相对于.filmGauge（胶片尺寸）的焦距。

### # .setFocalLength(focalLength : Float) → null

通过相对于当前.filmGauge的焦距，设置FOV。
默认情况下，焦距是为35mm（全画幅）摄影机而指定的。

### # .setViewOffset(fullWidth : Float, fullHeight : Float, x : Float, y : Float, width : Float, height : Float) → null

fullWidth — 多视图的全宽设置
fullHeight — 多视图的全高设置
x — 副摄影机的水平偏移
y — 副摄影机的垂直偏移
width — 副摄影机的宽度
height — 副摄影机的高度

在较大的viewing frustum（视锥体）中设置偏移量，对于多窗口或者多显示器的设置是很有用的。

例如，如果你有一个3x2的显示器阵列，每个显示器分辨率都是1920x1080，且这些显示器排列成像这样的网格：

    +---+---+---+
    | A | B | C |
    +---+---+---+
    | D | E | F |
    +---+---+---+

那对于每个显示器，你可以这样来设置、调用：
`const w = 1920; const h = 1080; const fullWidth = w * 3; const fullHeight = h * 2; // A camera.setViewOffset(fullWidth, fullHeight, w * 0, h * 0, w, h); // B camera.setViewOffset(fullWidth, fullHeight, w * 1, h * 0, w, h); // C camera.setViewOffset(fullWidth, fullHeight, w * 2, h * 0, w, h); // D camera.setViewOffset(fullWidth, fullHeight, w * 0, h * 1, w, h); // E camera.setViewOffset(fullWidth, fullHeight, w * 1, h * 1, w, h); // F camera.setViewOffset(fullWidth, fullHeight, w * 2, h * 1, w, h);` 请注意，显示器的不必具有相同的大小，或者不必在网格中。

### # .updateProjectionMatrix() → null

更新摄影机投影矩阵。在任何参数被改变以后必须被调用。

### # .toJSON(meta : Object) → Object

meta -- 包含有元数据的对象，例如对象后代中的纹理或图像
将摄影机转换为 Verge3D JSON Object/Scene format（Verge3D JSON 物体/场景格式）。

## 源代码

src/cameras/PerspectiveCamera.js