3D Transformations

Click To Rotate And Scale

Instruction:
本範例利用Mouse點選物體,再用拖曳的方式使物體旋轉或縮放尺寸;物體的旋轉會隨著拖曳方向的不同而異,而尺寸變化的情形也相同。

Building Blocks
(a) Mouse Waiter-Controllers/Mouse/Mouse Waiter
(b) Get Mouse Position-Controllers/Mouse/Get Mouse Position
(c) 2D Picking-Interface/Screen/2D Picking
(d) Switch On Parameter-Logics/Streaming/Switch On Parameter
(e) Binary Memory-Logics/Streaming/Binary Memory
(f) While-Logics/Loops/While
(g) Identity-Logics/Calculator/Identity
(h) Send Message-Logics/Message/Send Message
(i) Has Attribute-Logics/Attribute/Has Attribute
(j) Key Waiter-Controllers/Keyboard/Key Waiter
(k) Parameter Selector-Logics/Streaming/Parameter Selector
(l) Text Display-Interface/Text/Text Display
(m) Set Attribute-Logics/Attribute/Set Attribute
(n) Scale-3D Transformations/Basic/Scale
(o) Wait Message-Logics/Message/Wait Message
(p) Get Message Data-Logics/Message/Get Message Data
(q) Rotate-3D Transformations/Basic/Rotate
(r) Set As Active Camera-Cameras/Montage/Set As Active Camera
(s) Camera Orbit-Cameras/Movement/Camera Orbit

製作構想
將Mouse所點選的座標位置輸入Building Blocks-2D Picking,可以得到所選擇的物體(Rock或Box),再利用Building Blocks-Key Waiter選擇物體旋轉或是尺寸縮放。
在物體的旋轉方面,利用Mouse移動時的相對座標(X, Y),再經由演算法分別取得物體在X軸與Y軸的旋轉角度值;尺寸縮放方面,利用Mouse移動時X方向的變化量再經由演算法取得尺寸的縮放值。
其中,物體旋轉的方向和尺寸的縮放均會隨著拖曳方向而有所不同,充分表現了Mouse操控與物體變化間的互動性。

製作步驟
(a) Mouse

Mouse Waiter:等待訊息的傳入,在Edit Setting中只需勾選'Left Button Down'與'Left Button Up',如圖示。

Get Mouse Position:當'Left Button Down'訊息傳入後,即得到Mouse Cursor的座標位置Position(X, Y),其中X值作為一個捷徑X0且與座標位置Position由pOut輸出。

2D Picking:由pIn輸入Mouse Cursor 2D的座標位置Position而得到一物體,並於pOut輸出該物體;Window Relative-False。
Switch On Parameter:由pIn輸入捷徑Action(rotate或scale),如果Action為參數1-rotate,則由Out-1輸出至Behavior Graph-Rotate Object;如果Action為參數2-scale,則由Out-2輸出至Behavior Graph-Scale Object。
Rotate Object:當'Left Button Up'訊息傳出後,則由Input1輸入Behavior Graph-Rotate Object。

Binary Memory:判斷訊息,如果由In1輸入,則由pOut輸出State
Memory-True;如果由In2輸入,則由pOut輸出State Memory-False。
While:判斷訊息,如果由pIn輸入Condition-True,則執行Loop。
Perform Rotation:

Get Mouse Position:取得Mouse Cursor的座標位置Position(X, Y),其中X值與Y值分別作為捷徑X1與Y1由pOut輸出。
Subtraction:X1(Integer)-XO(Integer)=Out(Integer);Y1(Integer)-YO(Integer)=Out(Integer)

Division:In(Integer)/100(Float)=Out(Float)。
 
利用演算法求得的兩值分別作為移動Mouse單位位移量下,物體沿著X軸與Y軸的旋轉角度值。

Identity:由pIn輸入兩變數,且分別從pOut輸出。
Send Message:傳遞訊息。
設定訊息名稱Message-rotate;由pIn輸入捷徑Picked Object和X軸與Y軸的旋轉角度值。
Identity:為更新XO與YO值,由pIn輸入捷徑X1與Y1,取代XO與YO值再由pOut輸出。
Scale Object:當'Left Button Up'訊息傳出後,則由Input1輸入Behavior Graph-Scale Object。

Binary Memory:判斷訊息,如果由In1輸入,則由pOut輸出State Memory-True;如果由In2輸入,則由pOut輸出State Memory-False。
While:判斷訊息,如果由pIn輸入Condition-True,則執行Loop。
Has Attribute:賦予物體屬性。
由pIn輸入目標物Target-Picked Object;設定Category-Geometry;Attribute-Scale。
Perform Scaling:

Get Mouse Position:取得Mouse Cursor的座標位置Position(X, Y),其中X值作為捷徑X由pOut輸出。
Subtraction:X(Integer)-X0(Integer)=Out(Integer)

Division:In(Integer)/100(Float)=Out(Float)。

Addition:In(Float)+1(Float)=Out(Float)。

Max:In(Float)與Minimum-0.01(Float)取得較大值Out(Float),使物體的尺寸縮放比例最小為0.01。

Identity:由pIn輸入Max值與值(0.9078, 0.9078, 0.9078),且分別從pOut輸出。
 
註:由演算法求得的值,為移動Mouse在X方向的單位位移量下,物體的縮放比例。
 
Send Message:傳遞訊息。
設定訊息名稱Message-scale;由pIn輸入捷徑Picked Object和縮放比例值與值(0.9078, 0.9078, 0.9078)。
 
(b) Object

Key Waiter:設定鍵盤控制鍵'R'、'S'。
Parameter Selector:設定Pin1-rotate、Pin2-scale。
如果按下控制鍵'R',則由pOut輸出Action-rotate;按下控制鍵'S',則由pOut輸出Action-scale。
 
(c) Text Display:文字說明。

(d) Rock

Set Attribute:設定目標物Object-Rock;設定Category-Geometry;Attribute-Scale;Attribute Value-(1, 1, 1)。
Scale:設定Rock初始尺寸縮放值(X, Y, Z)-(1, 1, 1);Hierarchy-True,表示Building Blocks也應用在Child;Absolute-True,表示縮放倍數不和物體大小有關,但有一個絕對的值,表現的結果是原物的比例值。
Rotation:

Wait Message:設定等候訊息的名稱Message-rotate。
Get Message Data:設定訊息名稱Message-rotate;取得Data後由pOut分別輸出由Rock沿著X軸與Y軸的旋轉角度值。
Rotate:設定旋轉軸Axis of rotation-分別為X軸(0, 1, 0)、Y軸(1, 0, 0);由pIn分別輸入Rock沿著X軸、Y軸的旋轉角度值;參考軸Referential of the axis-Camera0000;Hierarchy-True,表示Building Blocks也應用在Child。
Scale:

Wait Message:設定等候訊息的名稱Message-scale。
Get Message Data:設定訊息名稱Message-scale;取得Data後由pOut分別輸出Rock的尺寸縮放值與值(0.9078, 0.9078, 0.9078)。
Multiplication:值(0.9078, 0.9078, 0.9078) (Vector)*尺寸縮放值(Float)=X、Y、Z方向尺寸縮放值(Vector)。

Scale:由pIn輸入Rock於X、Y、Z方向的尺寸縮放值Scaling Vector;Hierarchy-True,表示Building Blocks也應用在Child;Absolute-True,表示縮放倍數不和物體大小有關,但有一個絕對的值,表現的結果是原物的比例值。
Set Attribute:設定目標物Object-'-NULL-';設定Category-Geometry;Attribute-Scale;由pIn輸入Rock於X、Y、Z方向的尺寸縮放值Attribute Value。
 
(e) Box

Box所應用的Building Blocks與原理均和Rock相同,在此不加以贅述。
 
(f) Camera

Set As Active Camera:設定現在所使用的Camera。
Camera Orbit:設定觀看目標Target-Camera0000_Target,且作迴圈。
Camera Orbit預設值為Page Up-鏡頭拉近;Page Down-鏡頭拉遠;方向鍵Up和Down-繞X軸旋轉;方向鍵Left和Right-繞Y軸旋轉;Right Shift-速度* 2。

愛迪斯科技股份有限公司版權所有,本網站各連結標題,商標及連結內容歸原權利人所有.
台北市內湖區民權東路六段16011樓之
2 Tel:(02)2791-2917 Fax:(02)2791-2916
CopyRight 2001-2002 Axis 3D Technology,inc. All rights reserved.