在 2D 檢視上投影 3D 物件
Flash Player 10 以及更新的版本,Adobe AIR 1.5 以及更新的版本
flash.geom
套件中的
PerspectiveProjection
類別提供一種簡易方式,讓您在透過 3D 空間移動顯示物件時套用基本透視。
如果不明確為 3D 空間建立透視投影,3D 引擎便會使用預設的 PerspectiveProjection 物件 (位於根層級,並且會套用至其所有子系)。
定義 PerspectiveProjection 物件如何顯示 3D 空間的三個屬性如下:
-
fieldOfView
-
projectionCenter
-
focalLength
修改
fieldOfView
的值時,會自動修改
focalLength
的值 (反之亦然),因為兩者具有相互依存的關係。
用於計算
focalLength
(已指定
fieldOfView
值) 的公式為:
focalLength = stageWidth/2 * (cos(fieldOfView/2) / sin(fieldOfView/2)
通常,您會明確修改
fieldOfView
屬性。
檢視的欄位
藉由操作 PerspectiveProjection 類別的
fieldOfView
屬性,您可以讓靠近檢視者的 3D 顯示物件看起來較大,並且讓遠離檢視者的物件看起來較小。
fieldOfView
屬性會指定介於 0 和 180 度之間的角度,以決定透視投影的強度。指定的值愈大,對於沿著其 z 軸移動的顯示物件而言,所套用的扭曲程度就愈大。指定的
fieldOfView
值較小時,物件的縮放程度也較小,看起來只像是在空間中向後移動一點點距離。指定的
fieldOfView
值較大時,物件的扭曲程度也較大,看起來就像是移動了很遠的距離。最大值 179.9999... 度會導致極大的魚眼攝像機鏡頭效果。
fieldOfView
的最大值是 179.9999...,而最小值是 0.00001...。剛好為 0 和 180 都是不合法的值。
投影中心
projectionCenter
屬性表示透視投影中的消失點。這個屬性的作用會當做位移,套用至舞台左上角的註冊點 (0,0)。
當物件看起來離檢視者愈來愈遠時,它會向消失點傾斜,最終便會消失。請想像有個無限長的走廊。當您向走廊前方看去,牆壁的邊緣會在走廊遠端的消失點交會。
如果消失點位於舞台的中央,走廊的盡頭便會在中央的某一點消失不見。
projectionCenter
屬性的預設值為舞台的中央。例如,假設您希望元素出現在舞台的左邊,3D 區域出現在舞台的右邊,請將
projectionCenter
設定為指向舞台的右邊,讓該處成為 3D 檢視區域的消失點。
焦距
focalLength
屬性表示視點的原點 (0,0,0) 和顯示物件在其 z 軸的位置之間的距離。
長焦距就像望遠鏡頭一樣,可視範圍較狹隘,且物件之間的距離都經過壓縮。短焦距就像廣角鏡頭一樣,可視範圍較寬廣,但是會產生大幅度的扭曲。而中等焦距所呈現的大概就是肉眼可以看見的模樣。
通常在透視變形期間,
focalLength
會隨著顯示物件移動而經過動態重新計算,但是您也能明確加以設定。
預設的透視投影值
在根層級建立的預設 PerspectiveProjection 物件具有下列值:
-
fieldOfView:55
-
perspectiveCenter:stagewidth/2,stageHeight/2
-
focalLength:stageWidth/ 2 * ( cos(fieldOfView/2) / sin(fieldOfView/2) )
如果您未建立專屬的 PerspectiveProjection 物件,上述即為預設使用的值。
您可以實體化已自行修改
projectionCenter
和
fieldOfView
的專屬 PerspectiveProjection 物件。在這種情況下,新建立物件的預設值 (以預設舞台大小 500 x 500 為基礎) 如下所示:
|
|
|