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

|
 |