2009-11-05 60 views
1

我需要知道在更改rotationX值後顯示對象的可見高度。3D,AS3,Flex - 將旋轉度轉換爲可見高度

我有一個應用程序,允許用戶在3D空間佈局樓層。我希望地板的大小在3D旋轉後自動伸展,以便它始終覆蓋某個區域。

任何人都知道這樣做的公式嗎?

編輯:我想我真的想要做的是轉換度數像素。

在2D平面上表示100 x 100像素,旋轉時-10度變化意味着該平面在頂部有間隙,不再可見。我想知道這個縫隙有多少像素,以便我可以拉伸飛機。

在Flex中,顯示對象height屬性的值在應用旋轉之前和之後都保持不變,這實際上可能是一個錯誤。

編輯2:必須有一個通用的數學公式來解決這個問題,而不是Flash/Flex特定的東西。在3D空間中查看對象時,如果對象向後旋轉(對象翻轉頂部遠離查看器),則新可見高度根據旋轉角度是什麼?這可能是像素,米,肘或其他。

+0

而不是試圖平鋪一堆旋轉的單個圖像,爲什麼不平鋪圖像在一個平面上,然後旋轉整個飛機? – greggreg 2009-11-05 15:38:54

+0

對不起,如果我不清楚。這正是我計劃要做的。我需要測量旋轉後整個飛機的可見高度。 – Daniel 2009-11-05 15:53:05

回答

0

我沒有測試的情況下,但把我的頭頂部我猜是這樣的:

var d:DisplayObject; 
var rotationRadians:Number = d.rotationX * Math.PI/180; 
var visibleHeight:Number = d.height * Math.cos(rotationRadians); 

這不採取任何其他轉換進去,雖然。

+0

完美。這正是我之後的事情。我覺得Flash應該在後臺執行此操作,然後自動暴露該值。我似乎在使用內部3D軟件包時遇到了很多怪癖,與PPV或Away3D等相反。也許未來的更新會更直觀。 有關如何獲取對象新寬度的任何想法(根據+ xRotation或-xRotation,在頂部還是底部較小)? – Daniel 2009-11-12 11:46:42

+1

很高興我能幫到你。 假設沒有內置的方法(我還沒有使用Flash的3D) - 對於比單次旋轉更復雜的任何事情,您可能需要: 1.構建一個旋轉矩陣 2.通過矩陣將顯示對象邊界框的每個角的座標乘以矩陣以獲得其新的「旋轉」座標 3.使用某個除法的每個座標的z值將x和y轉換爲適當的量,原點 4.創建這些已轉換座標的邊界框並使用它的寬度和高度。 – 2009-11-13 09:51:52

0

您是否嘗試過使用對象的邊界矩形並進行測試?

var dO:DisplayObject = new DisplayObject(); 
dO.rotation = 10; 
var rect:Rectangle = dO.getRect(); 

// rect.topLeft.y is now the new top point. 
// rect.width is the new width. 
// rect.height is the new height. 

至於樓層,我需要更多的信息,但你有沒有嘗試過設置floor.percentWidth = 100?這可能會起作用。

+0

沒有運氣。看起來,儘管可見高度和y不同,但顯示對象高度和y(在本例中爲包含位圖的畫布)在調整3d旋轉時不會改變。邊界矩形似乎也是這樣做的。 該地板將由多個方形瓷磚組成。我計劃在3d旋轉之後在地板上添加單個瓷磚的行或列,直到地板面積達到目標y位置。在地板頂部將增加一個帶有牆壁和傢俱的PNG。 PNG的地板面積將是透明的,可讓地板圖像顯示出來。 – Daniel 2009-11-05 15:36:50

0

您是否檢查過DisplayObject.transform.pixelBounds?我沒有嘗試過,但考慮輪換可能更有可能。

0

旋轉實際上改變了DisplayObject的軸(即旋轉x和y軸)。這就是爲什麼你沒有看到高度的差異。所以爲了獲得視覺的高度和你可以試試這個。

var dO:DisplayObject = new DisplayObject(); 
addChild(); 
var rect1:Rectangle = dO.getRect(dO.parent); 
dO.rotation = 10; 
var rect2:Rectangle = dO.getRect(dO.parent); 
在這種情況下,rect1和rect2應該不同。如果你想檢查dO的視覺座標,那麼只需要用root改變dO.parent即可。

+0

我沒有得到我需要的結果。這是否適用於3D旋轉(rotationX,... Y,... Z)呢? – Daniel 2009-11-07 17:57:51

+0

你能提供一些代碼嗎? – bhups 2009-11-07 20:50:58