top
Loading...
X3D實戰基礎講座之十一
天極IT資訊短信服務 電腦小技巧
資費:包月5元
手機:
介紹:細處著手,巧處用功。高手和菜鳥之間的差別就是:高手什么都知道,菜鳥知道一些。電腦小技巧收集最新奇招高招,讓你輕松踏上高手之路。

我們知道,對于Visual C++而言,交互的實現是通過消息映射來進行的。同樣,X3D的交互實現也是通過類似的映射機制。用戶事件的產生是通過相應的傳感器產生的,而ROUTE語句就是相當于事件的映射,它映射到另一個輸入事件中。

X3D中,用戶事件的傳感器有:KeySensor(鍵盤傳感器) 、StringSensor(字符串傳感器)、 TouchSensor(觸摸傳感器)、PlaneSensor(平移傳感器) 、SphereSensor(繞點旋轉感器)和CylinderSensor(Y軸旋轉傳感器)等。由于BS瀏覽插件對X3D新增的KeySensor和StringSensor節點的支持不夠好,故這里暫不討論。

一、 TouchSensor(觸摸傳感器)節點

TouchSensor(觸摸傳感器)節點產生基于定點輸入設備(通常是鼠標)的事件。這些事件表明用戶是否正在點選某個幾何體和用戶在什么地方,以及在什么時候按了定點設備的鍵。它的主要域或事件有:

description -- 這個節點功能的文字提示。

enabled -- 設置傳感器節點是否有效。默認值為True。

isActive -- 當點擊或移動鼠標(指點設備時)發送事件。按下鼠標主鍵時isActive=True, 放開時
isActive=False。

isOver -- 當指點設備移動過傳感器表面時發送事件。

hitPoint_changed -- 事件輸出在子節點局部坐標系統點擊點的定位。

hitNormal_changed -- 事件輸出了點擊點的表面的法線向量。

hitTexCoord_changed -- 事件輸出了點擊點的表面的紋理坐標。

touchTime -- 當傳感器被指點設備點擊時產生時間事件。

需要說明的是:

(1) 若定點設備未指向傳感器的兄弟幾何體,而用戶開始將定點設備移到傳感器的兄弟幾何體時,傳感器將產生一個isOver事件,并將其值設置為True;相反,若定點設備已經指向傳感器的兄弟幾何體,此時用戶將定點設備移出傳感器的兄弟幾何體,傳感器將產生一個isOver事件,并將其值設置為False。

(2) 當用戶將定點設備從幾何體的一點移動到另一點時,傳感器將發送一系列事件: hitPoint_changed、hitNormal_changed、hitTexCoord_changed,分別表明用戶所指的位置、該點的法向量和紋理坐標。

(3) 當用戶點擊被TouchSensor監視的對象時,傳感器將產生值為True的isActive事件;而當用戶釋放定點設備的鍵時,傳感器將產生isActive為False的事件。

(4) 若用戶在指向幾何體時按下鼠標鍵,然后在仍然指向這個幾何體(或又回到這個幾何體)時釋放鼠標鍵,傳感器將要發送一個touchTime事件,表明鍵被釋放的時間。可以使用這一事件來模擬許多常用的用戶接口(如只有在用戶點擊和釋放定點設備按鍵時才產生的動作)。

下面舉兩個例子來說明:

示例1:當鼠標處在立方體的時候,就會有一個小球跟隨鼠標移動。

示例代碼如下:



示例的結果如下圖所示:



說明:需要將觸摸傳感器節點和要觸摸的形體節點放在同一個父節點處。

示例2:當單擊中間小球時,將打開點光源,照亮周圍的兩個球。

示例代碼如下:



示例的結果如下圖所示:



作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗