three.js PerspectiveCamera

2023-02-16 17:29 更新

這一攝像機使用perspective projection(透視投影)來進行投影。

這一投影模式被用來模擬人眼所看到的景象,它是3D場景的渲染中使用得最普遍的投影模式。

代碼示例

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

例子

animation / skinning / blending

animation / skinning / blending

effects / stereo

interactive / cubes

loader / collada / skinning

構(gòu)造器

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

fov — 攝像機視錐體垂直視野角度aspect — 攝像機視錐體長寬比near — 攝像機視錐體近端面far — 攝像機視錐體遠端面這些參數(shù)一起定義了攝像機的viewing frustum(視錐體)。

屬性

共有屬性請參見其基類 Camera 。請注意,在大多數(shù)屬性發(fā)生改變之后,你將需要調(diào)用.updateProjectionMatrix來使得這些改變生效。

.aspect : Float

攝像機視錐體的長寬比,通常是使用畫布的寬/畫布的高。默認值是1(正方形畫布)。

.far : Float

攝像機的遠端面,默認值是2000。該值必須大于near plane(攝像機視錐體近端面)的值。

.filmGauge : Float

膠片尺寸,其默認值為35(毫米)。 這個參數(shù)不會影響攝像機的投影矩陣,除非.filmOffset被設置為了一個非零的值。

.filmOffset : Float

水平偏離中心偏移量,和.filmGauge單位相同。默認值為0。

.focus : Float

用于立體視覺和景深效果的物體的距離。 這個參數(shù)不會影響攝像機的投影矩陣,除非使用了StereoCamera。 默認值是10。

.fov : Float

攝像機視錐體垂直視野角度,從視圖的底部到頂部,以角度來表示。默認值是50。

.isPerspectiveCamera : Boolean

只讀標志,用于檢查給定對象是否屬于 PerspectiveCamera 類型。

.near : Float

攝像機的近端面,默認值是0.1。其有效值范圍是0到當前攝像機far plane(遠端面)的值之間。 請注意,和OrthographicCamera不同,0對于PerspectiveCamera的近端面來說不是一個有效值。

.view : Object

視錐體窗口規(guī)范或空值。這個值使用.setViewOffset方法來進行設置,使用.clearViewOffset方法來進行清除。

.zoom : number

獲取或者設置攝像機的縮放倍數(shù),其默認值為1。

方法

共有方法請參見其基類Camera。

.clearViewOffset () : undefined

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

.getEffectiveFOV () : Float

結(jié)合.zoom(縮放倍數(shù)),以角度返回當前垂直視野角度。

.getFilmHeight () : Float

返回當前膠片上圖像的高,如果.aspect小于或等于1(肖像格式、縱向構(gòu)圖),則結(jié)果等于.filmGauge。

.getFilmWidth () : Float

返回當前膠片上圖像的寬,如果.aspect大于或等于1(景觀格式、橫向構(gòu)圖),則結(jié)果等于.filmGauge。

.getFocalLength () : Float

返回當前.fov(視野角度)相對于.filmGauge(膠片尺寸)的焦距。

.setFocalLength ( focalLength : Float ) : undefined

通過相對于當前.filmGauge的焦距,設置FOV。默認情況下,焦距是為35mm(全畫幅)攝像機而指定的。

.setViewOffset ( fullWidth : Float, fullHeight : Float, x : Float, y : Float, width : Float, height : Float ) : undefined

fullWidth — 多視圖的全寬設置fullHeight — 多視圖的全高設置x — 副攝像機的水平偏移y — 副攝像機的垂直偏移width — 副攝像機的寬度height — 副攝像機的高度

在較大的viewing frustum(視錐體)中設置偏移量,對于多窗口或者多顯示器的設置是很有用的。

例如,如果你有一個3x2的顯示器陣列,每個顯示器分辨率都是1920x1080,且這些顯示器排列成像這樣的網(wǎng)格:

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

那對于每個顯示器,你可以這樣來設置、調(diào)用:

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 );

請注意,顯示器的不必具有相同的大小,或者不必在網(wǎng)格中。

.updateProjectionMatrix () : undefined

更新攝像機投影矩陣。在任何參數(shù)被改變以后必須被調(diào)用。

.toJSON (meta : Object) : Object

meta -- 包含有元數(shù)據(jù)的對象,例如對象后代中的紋理或圖像將攝像機轉(zhuǎn)換為 three.js JSON Object/Scene format(three.js JSON 物體/場景格式)。

源代碼

src/cameras/PerspectiveCamera.js


以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號