在 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 為基礎) 如下所示:

  • fieldOfView:55

  • perspectiveCenter:250,250

  • focalLength:480.24554443359375