当前位置:天才代写 > tutorial > JAVA 教程 > X3D实战基本讲座之十一

X3D实战基本讲座之十一

2017-11-11 08:00 星期六 所属: JAVA 教程 浏览:928

副标题#e#

我们知道,对付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事件,表白键被释放的时间。可以利用这一事件来模仿很多常用的用户接口(如只有在用户点击和释放定点设备按键时才发生的行动)。

下面举两个例子来说明:


#p#副标题#e#

示例1:当鼠标处在立方体的时候,就会有一个小球跟从鼠标移动。

示例代码如下:

X3D实战根基讲座之十一

示例的功效如下图所示:

X3D实战根基讲座之十一

说明:需要将触摸传感器节点和要触摸的形体节点放在同一个父节点处。

示例2:当单击中间小球时,将打开点光源,照亮周围的两个球。

示例代码如下:

X3D实战根基讲座之十一

示例的功效如下图所示:

X3D实战根基讲座之十一

#p#副标题#e#

二、PlaneSensor(平移传感器)节点

PlaneSensor 传感器节点用于指点设备在平行于Z=0平面上的行动,只要用户点按、拖动该传感器的兄弟几许体,此节点均将拖动(如用户利用鼠标举办的拖动)表明为在传感器的局部xy平面上的调动。其主要域或事件如下:

description — 这个节点成果的文字提示。

enabled — 配置传感器节点是否有效。默认值为True。

minPosition — 在xy平面内限制当前点向上和向右的translation事件。

maxPosition — 在xy平面内限制当前点向下和向左的translation事件。

offset — 该域指出相关几许体被移动后相对付初始点的位置。

autoOffset — 指示是否在拖动竣事时将当前位置生存在offset中来实此刻两次拖动之间跟踪当前位置(True暗示跟踪)。若autoOffset值为False,则用户每次开始新一轮拖动时,被拖动的几许体都自动先复位到初始位置。

isActive — 指示定点设备当前按钮是否按下。此事件仅当按钮被按下或释放时才发出,拖动期间则不生成。

isOver — 当指点设备移动过传感器外貌时发送事件。

trackPoint_changed — 拖动期间任何给按时刻用户的定点设备在xy平面上的实际点(忽略 minPosition和 maxPosition)。

translation_changed — 拖动期间任何给按时刻用户的定点设备在xy平面上的锁定点(受限于minPosition和 maxPosition)。

示譬喻下:

X3D实战根基讲座之十一

功效如下:

X3D实战根基讲座之十一

说明:当拖动小立方体的时候,无论如何也出不了白色的矩形框。

#p#副标题#e#

三、SphereSensor(绕点旋转感器)节点

#p#分页标题#e#

SphereSensor节点将二维的拖动表明为三维空间中绕局部原点的旋转。若在该节点的兄弟几许体处按下鼠标,欣赏器会以点击鼠标的点到原点的间隔为半径作一个想象中的球。随后的拖动将表明为旋转球体。它的主要域或事件如下:

description — 这个节点成果的文字提示。

enabled — 配置传感器节点是否有效。默认值为True。

offset — 在一次拖动后,相关几许体相对付初始位置的旋转角度。

autoOffset — 配置为True,暗示在拖动竣事时,将当前的方位值存储到offset中,若autoOffset配置为False,在用户每次开始一个新的托动时,几许体复位到初始值。

isActive — 当点击或移动鼠标(指点设备时)发送事件。按下鼠标主键时isActive=True, 放开时isActive=False。

isOver — 当指点设备移动过传感器外貌时发送事件。

trackPoint_changed — 用户在拖动进程中任意时刻定点设备在假想的球体外貌上的实际位置。

rotation_changed — 用户在拖动进程中任意时刻假想球体的当前朝向。

示譬喻下:

X3D实战根基讲座之十一

功效如下:

X3D实战根基讲座之十一

#p#副标题#e#

四、CylinderSensor(Y轴旋转传感器)节点

CylinderSensor节点把二维的拖曳输入(如拖曳鼠标)转变为三维空间中沿y轴的旋转。其主要域或事件如下:

description — 这个节点成果的文字提示。

enabled — 配置传感器节点是否有效。默认值为True。

minAngle — 答允旋转的最小角度(旋转角小于此范畴时,仍被限制在这一范畴内)。

maxAngle — 答允旋转的最大角度(旋转角大于此范畴时,仍被限钳制在这一范畴内)。

diskAngle — 抉择节点行动是像一个圆柱或像磁碟绕y轴旋转。若用户在圆柱轴四周点击,传感器的兄弟几许体的行动像磁碟动弹,不然像圆柱一样动弹。

offset — 指出从初始偏向动弹的角度值。

autoOffset — 指出是否在每次拖动完成后将当前的偏向角存入offset域,以到达跟踪当前方位的目标。假如autoOffset是False,每当用户开始一个新的拖动动时,被拖动几许体规复至最初的方位。

isActive — 当点击或移动鼠标(指点设备时)发送事件。按下鼠标主键时isActive=True, 放开时isActive=False。

isOver — 当指点设备移动过传感器外貌时发送事件。

说明:

假如用户点中圆柱的顶或低面,拖曳行动就会被表明为和旋转一个平面圆盘一样。假如用户点中圆柱的侧面部门,拖曳行动就会被表明为旋转这个圆柱。假如仅仅对非凡的旋转范畴有乐趣,可以通过配置minAngle和maxAngle的值把旋转限制在那一范畴内。假如minAngle大于maxAngle,就没有任何限制了。

在上述代码中,只要将SphereSensor节点改成CylinderSensor节点就可以了,因此这里不再举例。

除了上述传感器外,X3D尚有VisibilitySensor、ProximitySensor等感知传感器,这里不再先容。在下一讲中,我们将接头X3D的嵌入剧本编程技能。

 

    关键字:

天才代写-代写联系方式