|

|
|
3D
Transformations
|
| Click
To Rotate And Scale |
| 本範例利用Mouse點選物體,再用拖曳的方式使物體旋轉或縮放尺寸;物體的旋轉會隨著拖曳方向的不同而異,而尺寸變化的情形也相同。 |
| (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操控與物體變化間的互動性。 |

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

| Key
Waiter:設定鍵盤控制鍵'R'、'S'。 |
| Parameter
Selector:設定Pin1-rotate、Pin2-scale。 |
| 如果按下控制鍵'R',則由pOut輸出Action-rotate;按下控制鍵'S',則由pOut輸出Action-scale。 |


| 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。 |

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

| 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。 |
|
|

|
 |