next up previous contents
Nächste Seite: Prototypen in VRML bzw. Aufwärts: Interaktion mit dem Betrachter Vorherige Seite: Kommunikation zwischen den Knoten   Inhalt

Sensoren

In VRML bzw. X3D lassen sich verschiedene Sensoren definieren. Im Folgenden werden aber nur die im Rahmen dieser Arbeit benötigten Sensoren vorgestellt [VRML1997].
ProximitySensor
Mit diesem Sensor kann man die genaue Position bestimmen, die der Betrachter einer Szene innerhalb einer bestimmten Region einnimmt. Durch die Datenfelder center wird der Mittelpunkt und durch size die Größe der Region festgelegt. Betritt der Betrachter die Region, wird dem Feld isActive der Wert TRUE zugewiesen, wodurch ein ensprechendes Ereignis erzeugt wird. Beim Verlassen der Region wird das Feld wieder auf FALSE gesetzt. Zusätzlich kann man über die Datenfelder enterTime und exitTime die dazu passenden Zeitpunkte ermitteln. Innerhalb der Region kann jede Positions- und Orientierungsänderung über die Felder position und orientation an andere Knoten weitergegeleitet werden.
TouchSensor
Dieser Sensor ermöglicht die Verarbeitung von Mausaktionen. Wird der Mauszeiger über ein Objekt, das mit einem TouchSensor kombiniert ist, bewegt, wird dem Datenfeld isOver der Wert True zugewiesen. Bewegt man die Maus wieder vom Objekt, wird der Wert auf False zurückgesetzt. Klickt man ein Objekt an, erhält das Feld isActive ebenfalls den Wert True. Nach dem Loslassen der Maustaste wird dann der Wert wieder auf False gesetzt. Die genauen 3D-Koordinaten des Klickpunktes kann man über das Feld hitPoint abfragen.
PlaneSensor
Mit Hilfe dieses Sensors lassen sich Objekte innerhalb der X/Y-Ebene verschieben. Der Bewegungsbereich kann durch die Datenfelder minPosition und maxPosition eingeschränkt werden. Über das Feld translation werden dem zu verschiebenden Objekt die genauen Koordinaten mitgeteilt.

Beispiel eines TouchSensors und eines Script-Knotens in X3D
<Scene>
   <Transform DEF="trans" translation="3 0 0">
      <TouchSensor DEF="touch"/>
      <Shape>
         <Sphere radius="2"/>
         <Appearance>
            <Material diffuseColor="1 0 0"/>
         </Appearance>
      </Shape>
   </Transform>
   <Script DEF="schieben">
      <field accessType="inputOnly" name="input" type="SFBool"/>
      <field accessType="outputOnly" name="output" 
          type="SFVec3f"/>
      <![CDATA[javascript:
         function input(){ output = new SFVec3f(6, 0, 0);}]]>
   </Script>
   <ROUTE fromField="isActive" fromNode="touch" 
      toField="input" toNode="schieben"/>
   <ROUTE fromField="output" fromNode="schieben" 
      toField="translation" toNode="trans"/>
</Scene>

Im Quellcode 5.3 wird wiederum eine rote Kugel definiert, die diesmal jedoch mit einem TouchSensor versehen ist. Aktiviert man den Sensor durch einen Mausklick, wird ein entsprechendes Ereignis an den Script-Knoten gesandt. Dieses Ereignis wird durch die Funktion input verarbeitet und erzeugt seinerseits ein neues Ereignis, indem dem output Datenfeld ein neuer Wert zugewiesen wurde. Da das Feld über eine ROUTE mit dem translation-Feld des Transform-Knotens verbunden ist, wird hier automatisch der Wert übernommen. D.h. beim Mausklick auf die Kugel wird der Mittelpunkt von (3/0/0) nach (6/0/0) verschoben.


next up previous contents
Nächste Seite: Prototypen in VRML bzw. Aufwärts: Interaktion mit dem Betrachter Vorherige Seite: Kommunikation zwischen den Knoten   Inhalt
Oliver Krone 2003-04-28