Virtuelle RealitätVirtual Reality

Funktionale Modellierung in X3DFunctional Modelling in X3D

Dr. Thies Pfeiffer

Cognitive Interaction Technology Center of Excellence,
Technische Fakultät, Universität Bielefeld

Termin:Montags, 14:15 Uhr

Raum: CITEC Auditorium

Schedule:Mondays, 2:15 p.m.

Room: CITEC Auditorium

ÜberblickOverview

Termin 05 - Funktionale ModellierungAppointment 05 - Functional Modelling

  • Umsetzung von funktionalen Elementen in der SimulationModelling functional elements in a simulation
  • Funktionale Modellierung in X3DFunctional modelling in X3D
    • Einführung in die wesentlichen Techniken der funktionalen ModellierungIntroduction to the basic techniques for functional modelling
    • FelderFields
    • RoutenRoutes
    • SkripteScripts

Funktionale Modellierung - Stand der VorlesungFunctional Modelling: Where we are

BisherUp to now

  • Modellierung von Geometrie, Vorlesungstermine 02 und 03Modelling of geometries in appointments 02 and 03
    • Punkte, Linien, FlächenPoints, lines, surfaces
    • Einfache Körper (Kugel, Würfel, Torus, ...)Basic bodies (Sphere, Box, Torus, ...)
    • Komposition von komplexeren Objekten über TransformationenCompositioning of complex objects using transformations
    • Einfacher SzenengraphBasic scenegraph
  • Modellierung von Geräuschen, Vorlesungstermin 04Modelling of sound, appointment 04
    • Positionierung von 3D Sound über das Sound-TagPositioning of 3D spatial sound using the Sound-tag
  • Die bisherigen Modellierungen sind statisch und nicht interaktivUp to now we have focused on static, non-interactive models
    • ... bis auf die vom Browser bereitgestellte Navigation... except maybe for the navigation that is provided by the browser

Funktionale ModellierungFunctional Modelling

Funktionale ModellierungFunctional Modelling

Warum benötigen wir eine funktionale Modellierung?Why do we need functional modelling?

  • Unsere reale Welt verändert sich ständig und wir können Einfluß auf sie haben. Wenn eine virtuelle Welt natürlich vorkommen soll, dann sollte sie sich ebenfalls verändern und vom Benutzer verändert werden können.The real world is highly dynamic and we are a part of this dynamics. If we want a virtual world to appear natural, it has to be dynamic and we have to allow the user to modify it.
  • Viele Sachverhalte, die mit Mitteln der Virtuellen Realität dargestellt werden sollen, sind in sich dynamisch.The nature of many simulations to be modelled in virtual reality is dynamic.
  • Oft geht es z.B. um die Simulation von Prozessen mit Benutzer-Interaktion, z.B. bei Trainings oder Erprobungen. Dort muss sich die Situation dynamisch an die Entscheidungen des Benutzers anpassen.Many applications are designed to have a focus on the interaction of the user, e.g. in training or rehabilitation. The environment thus has to provide feedback based on the decisions and actions of the user.
  • Häufig werden sehr komplexe Daten dargestellt und daher ist während der Exploration der Daten eine Auswahl und Manipulation durch den Benutzer erforderlich, z.B. zur Auswahl von Kriterien als Filter für die Darstellung.Often virtual reality is used to present and explore complex data. In these situations the user has to select and manipulate criteria as filter for the visualization.
  • Inhalte, die bestimmten Mustern folgen, können über funktionale Modellierung einfacher/kompakter ausgedrückt werden (Design-Time Vorteil).Content that follows certain regularities can be modelled more easily or more efficiently using functional modelling (advantage during design-time).

Funktionale ModellierungFunctional Modelling

RahmenbedinungenUnderlying Conditions

  • Die Darstellung der Virtuellen Welt erfolgt in diskreten Zeitschritten. Diese können für die unterschiedlichen Modalitäten verschieden seinThe presentation of the virtual world happens in discrete time steps. These can differ depending on the presentation modality.
    • Framerate der visuellen Darstellung (Ziel: > 25 Hz)Framerate of visual display (goal > 25 Hz)
    • Samplerate der auditiven Darstellung (Ziel: > 44 kHz)Samplerate of auditive display (goal: > 44 kHz)
    • Updaterate der taktilen Darstellung (Ziel: > 1 kHz)Updaterate of tactile displays (goal: >; 1 kHz)
  • Die funktionale Modellierung muss diesen Umstand berücksichtigen und sollte für eine entsprechende konsistente Aktualisierung der Weltbeschreibung sorgen.Functional modelling should consider these conditions and provide a consistent update of the world description.
    • Zentrale Herangehensweise: Entkopplung von Simulationszeit und Framerate: nur so kann die Simulation auch unter ungünstigen Bedingungen noch valide Ergebnisse zeigen, wenn auch dann vielleicht nicht mehr in interaktiven Frameraten.Central approach: Decoupling of simulated time and framerate of the display system: only then is the simulation able to generate valid results even under disadvantageous conditions, if not with interactive framerates.

Funktionale Modellierung in X3DFunctional Modelling in X3D

Der Szenengraph von X3DThe scenegraph of X3D

X3D SzenengraphX3D Scenegraph

  • Graphische Darstellung umfasst vier BasisknotenGraphical depiction covers four basic nodes
    • Wurzelknoten/rootroot: Die Basis des Szenengraphen. Es kann nur einen geben!The basis of the scenegraph. There can be only one!
    • Gruppenknotengroup nodes: Fassen eine beliebige Anzahl an Knoten zusammen, die sog. Kinder/ChildrenCombine any number of nodes, the so-called children
    • Kindknotenchild nodes: Sind keine Gruppenknoten, können aber eine Komposition einzelner Objektknoten umfassen (Bsp: Shape)They are no group nodes, however, they can compose different object nodes (e.g. Shape)
    • Objektknotenobject nodes: Sind keine Kindknoten oder Gruppenknoten und haben selbst auch keine untergeordneten Knoten mehr (Bsp. ImageTexture)They are neither child nodes nor group nodes and have no subordinated nodes (e.g. ImageTexture)
Basis-Knotentypen für die Darstellung von X3D SzenengraphenBasic nodes for the display of X3D scenegraphs

Der Szenengraph von X3DThe scenegraph of X3D

X3D Szenengraph: BeispielX3D Scenegraph: Example

Einfaches Beispiel für einen Szenengraphen in X3DSimple example of a scenegraph in X3D

Der Szenengraph von X3DThe scenegraph of X3D

X3D Szenengraph: FelderFields

  • Knoten in X3D besitzen FelderNodes in X3D have fields
  • Einige haben wir schon genutzt, aber noch nicht kennen gelerntSome fields we have already used implicitly
    • children
    • geometry
    • Die Hierarchie des X3D-XML Dokumentes wird also auf Felder der X3D Knoten abgebildet.The hierarchy of the X3D-XML document is constructed using specific fields, in particular the children field, of the X3D nodes.
  • Andere haben wir schon genutzt:Some fields we have actively used:
    • Transform:translation
    • Transform:rotation
    • Transform:scale
Beispiel für einen Szenengraphen in X3D mit Darstellung der versteckten FelderExample of a scenegraph in X3D in which the hidden fields are depicted

Der Datengraph: FelderThe Datagraph: Fields

Der DatengraphThe Datagraph

  • Orthogonal zum Szenengraph lässt sich in X3D ein Datengraph definieren.Orthogonally to the scenegraph X3D allows us to define a datagraph
  • Im Datengraph werden einzelne Felder miteinander verbunden (Ausgangsfeld $\to$ Zielfeld).The datagraph connects individual fields (source field $\to$ target field).
  • Eine Änderung des Feldinhalts im Ausgangsfeld wird dann in das Zielfeld übertragen (aber nicht automatisch auch umgekehrt).A change in the source field is propagated to the target field (but not vice-versa).
  • Um die Verbindungen syntaktisch abzusichern, werden für jedes Feld Zugriffsrechte und Typ festgelegt.To safeguard the connections, for each field access rights and data type are defined.
Beispiel für einen Datengraph in X3D: die rotation-Felder der beiden Transformationsknoten werden verbunden, so dass die lokale (!) Rotation der Box stets auch auf die Sphere übertragen wird. Dies gilt jedoch nicht umgekehrt!Example of a datagraph in X3D: the rotation fields of the two transform nodes are connected. This way the local (!) rotation of the box is propagated to the sphere, but not vice-versa!

Der Datengraph: FelderThe Datagraph: Fields

Zugriffsrechte (Sicht von außen)Acccess rights (external view)

  • inputOnly: nur schreibender Zugriffcan only be written
  • outputOnly: nur lesender Zugriffcan only be read
  • inputOutput: schreibender und lesender Zugriffcan be read and written
  • initializeOnly: schreibender Zugriff nur bei Initialisierung des Knotenscan only be written during initialization of the node

TypenTypes

  • Unterscheidung in Single-Fields (SF) und Multi-Fields (MF), letztere mit einfacher Array-SyntaxDifferentiation between Single-Fields (SF) and Multi-Fields (MF), the latter can be accessed by simple array-syntax
  • Folgende Typen sind definiertThe following types are defined:
    • SFBool/MFBool, SFFloat/MFFloat, SFDouble/MFDouble, SFColor/MFColor, SFColorRGBA/MFColorRGBA, SFInt32/MFInt32, SFString/MFString, SFTime/MFTime
    • SFRotation/MFRotation, SFVec2f/MFVec2f, SFVec3f/MFVec3f
    • SFImage/MFImage, SFNode/MFNode

Der Datengraph: RoutesThe Datagraph: Routes

Felder verknüpfen: RoutenConnecting fields: Routes

  • Die Verknüpfung der Felder geschieht durch RoutenIndividual fields are connected by routes
  • Syntax: <ROUTE fromNode="" fromField="" toNode="" toField=""/>
  • BeispielExample:
    <Transform DEF="T1" rotation="1 0 0 0.75"/>
    <Transform DEF="T2"/>
    <ROUTE
      fromNode="T1" fromField="rotation"
      toNode="T2" toField="rotation"/>
  • Routen sind keine Knoten des Szenengraphen (als Kennzeichnung komplett groß geschrieben), ihre Spezifikation wird direkt umgesetzt.Routes are no nodes of the scenegraph (this is why they are written in bold letters). What they specify will be directly realized by the X3D browser.
  • Daher wichtig: Die Route muss nach den Bezugsknoten definiert werden, da sonst die Referenzen unbekannt sind!Important: The ROUTE has to be defined after all related nodes, otherwise the reference to the nodes cannot be established!

Der Datengraph: AnimationenThe Datagraph: Animations

Animationen mit dem Datengraph: TimeSensorAnimations using the datagraph: TimeSensor

  • Neben Knoten zur Geometrie-Beschreibung gibt es in X3D auch Knoten, die Funktionen für den Datengraph bereitstellen.Besides nodes for describing geometry, X3D also contains nodes to realize certain functions.
  • Wichtigste Knoten für die Animation sind TimeSensor und Interpolatoren (nächste Seite)The most important nodes for animations are TimeSensor and interpolators (next slide)
  • Syntax: <TimeSensor
    • fraction_changed (SFTime, outputOnly): Wert zwischen 0 und 1.0, 0 beim Start, 1.0 bei Erreichen von cycleInterval nach dem StartValue between 0 and 1.0, 0 when starting, 1.0 when cycleInterval has been reached after starting
    • cycleInterval (SFTime, inputOutput): Dauer der AnimationDuration of the animation
    • loop (SFBool, inputOutput): Wenn gesetzt, unendliche Wiederholung, startet dann auch den TimeSensorIf set, the sensor will repeat infinitely. This will also directy start the TimeSensor
    • startTime (SFTime, inputOutput): wenn kleiner aktueller Zeit, startet der TimeSensorIf lower than the current time, the TimeSensor is started.
    />

Der Datengraph: AnimationenThe Datagraph: Animations

Animationen mit dem Datengraph: InterpolatorenAnimations using the datagraph: Interpolators

  • Wichtige InterpolatorenImportant interpolators: PositionInterpolator, OrientationInterpolator, ScalarInterpolator, ColorInterpolator ...

Der Datengraph: AnimationenThe Datagraph: Animations

Animationen mit dem Datengraph: InterpolatorenAnimations using the datagraph: Interpolators

  • Syntax: <PositionInterpolator
      • set_fraction (SFFloat, inputOnly): Wert zwischen 0 und 1.0, als Index in die Schlüsseltabelle (Bsp. 0.7) Value between 0 and 1,0. As index in the key table (e.g. 0.7)
      • key (MFFloat, inputOutput): Schlüsseltabelle mit den Schlüsseln, muss gleiche Anzahl an Einträgen wie keyValue haben (Bsp. 0 0.5 1.0)Key table with the keys to select matching values, has to have the same number of entries as keyValue (e.g. 0 0.5 1.0)
      • keyValue (MFVec3f, inputOutput): Schlüsselwerte, hier vom Typ Vec3f (Bsp. Key values between which the output will be interpolated, here of type Vec3f (e.g. 0 0 0, 1 0 0, 0 0 0)
      • value_changed (SFVec3f, outputOnly): aktueller Wert, ergibt sich als Interpolation der keyValue-Werte an den Positionen der keys zwischen denen der set_fraction Wert liegt (Bsp. 1 0 0)current interpolated value, based on the interpolation of the keyValue entries on the positions of the key entries inbetween which the set_fraction value lays (e.g. 1 0 0).
    />

Der Datengraph: InteractionsThe Datagraph: Interactions

Animationen mit dem Datengraph: InteraktionenAnimations using the datagraph: Interactions

    • "Sensoren" um dem Benutzer eine Interaktion zu ermöglichen: "Sensors" which allow the user to interact: TouchSensor, PlaneSensor, CylinderSensor, SphereSensor, KeySensor, StringSensor

Download als X3D-Datei

Dieses Beispiel in X3DOM ist derzeit (26. November 2015) nicht funktionsfähig, da die aktuelle Version von X3DOM keinen TouchSensor unterstüzt und der TimeSensor nicht das Standardverhalten zeigt. Eigentlich dürfte sich der Block nicht bewegen. Das Beispiel sollte jedoch im InstantPlayer laufen, dazu müssten die Tags jedoch alle mit einem Großbuchstaben anfangen und ROUTE ganz groß geschrieben werden.At the time being (26. November 2015), this example is not fully functional in the web interface, as the current version of X3DOM does not support TouchSensors and the TimeSensor does not show the standard behavior. Normally, the block should not move. The example will run, however, in the native InstantPLayer, if the Tags are written with a starting capital letter and ROUTE is written completely capitalized.

Der Datengraph: InteractionsThe Datagraph: Interactions

Animationen mit dem Datengraph: InteraktionenAnimations using the datagraph: Interactions

    • Syntax: <TouchSensor
      • isOver (SFBool, outputOnly): Wert true wenn Maus über GeometrieValue is true if the mouse is over the geometry
      • isActive (SFBool, outputOnly): Wert true wenn Maus über Geometrie und Mausbutton geklicktValue is true if the mouse is over the geometry and the mouse button is pressed
      • touchTime (SFTime, outputOnly): Zeitpunkt des letzten KlicksTimestamp when the last click happened
      />
    • Routed man isActive in das loop Feld eines TimeSensors oder touchTime in startTime eines TimeSensors, so wird dieser gestartet und läuft mehrfach oder einfach durch.If isActive is routed into the loop field of a TimeSensor or touchTime is routed in startTime of a TimeSensor, the sensor is started and runs repeatedly or once.

Download als X3D-Datei

Dieses Beispiel in X3DOM ist derzeit (26. November 2015) nicht funktionsfähig, da die aktuelle Version von X3DOM keinen TouchSensor unterstüzt und der TimeSensor nicht das Standardverhalten zeigt. Eigentlich dürfte sich der Block nicht bewegen. Das Beispiel sollte jedoch im InstantPlayer laufen, dazu müssten die Tags jedoch alle mit einem Großbuchstaben anfangen und ROUTE ganz groß geschrieben werden.At the time being (26. November 2015), this example is not fully functional in the web interface, as the current version of X3DOM does not support TouchSensors and the TimeSensor does not show the standard behavior. Normally, the block should not move. The example will run, however, in the native InstantPLayer, if the Tags are written with a starting capital letter and ROUTE is written completely capitalized.

Scripting

Der Script KnotenThe Script Node

  • Neben den Möglichkeiten des Datengraphen bietet X3D noch einen Script Knoten der entweder durch JavaScript oder durch Java implementiert werden kann.Besides the declarative datagraph, X3D also offers a more versatile Script node, which can be implemented either used JavaScript or Java.
  • Syntax: <Script
    • url (MFString, inputOutput): Array mit URLs zum Script-Code (falls nicht JavaScript inline als CDATA verwendet wird)Array of URLs pointing to the script-code (in case of JavaScript the code can also be embedded inline as CDATA)
    • directOutput (SFBool, initializeOnly): Sollte auf true gesetzt werden, falls das Skript anders als durch Routen den Szenengraphen modifiziert.Should be set to true if the script is going to modify parts of the scenegraph itself directly, other than through the field and route mechanism.
    • mustEvaluate (SFBool, initializeOnly): Sollte auf true gesetzt werden, falls das Skript auf jeden Fall direkt ausgeführt werden soll und keine Werte für ein Batch-processing gecached werden dürfen.Should be set to true if the script should be executed every time. If false, the script might be skipped or the results of the script might be cached to optimize run-time performance.
    />

Scripting: JavaScript

Scripting mit JavaScriptScripting with JavaScript

  • Typischer AufbauTypical Structure
    • function initialize() {}: wird beim Initialisieren des Scripts aufgerufenis called during the initialization of the script
    • function prepareEvents() {}: wird vor der Verarbeitung eingehender Events aufgerufenis called before the new events for the current frame are posted to the script
    • function eventsProcessed() {}: wird nach der Verarbeitung eingehender Events aufgerufenis called after all events for the current frame have been processed
    • function shutdown() {}: wird beim Beenden des Scripts aufgerufenis called when the script is removed from the scenegraph

Scripting: JavaScript

Scripting mit JavaScriptScripting with JavaScript

  • Für jedes Skript können eigene Felder definiert werdenEach script can define its own interface using fields
    • z.B. e.g. <field name="NAME" type="SFInt32/..." accessType="inputOnly/..."/>
    • Für jedes outputOnly-Feld wird eine entsprechend benannte Variable zur Ausgabe bereitgestelltFor each outputOnly-field a variable with the corresponding name is provided for output
    • Für jedes inputOnly-Feld kann eine function NAME( value, timestamp ) {} definiert werdenFor each inputOnly-field a function declared as function NAME( value, timestamp ) {} will be called
    • Für jedes inputOutput-Feld wird eine les- und schreibbare Variable NAME bereitgestelltFor each inputOutput-field a read- and writeable variable NAME will be defined
    • Für jedes initializeOnly-Feld wird eine lesbare Variable NAME bereitgestelltFor each initializeOnly-field a readable variable NAME will be defined

Scripting: JavaScript

Beispiel für Scripting mit JavaScriptExample for scripting in JavaScript


<Script DEF="myAdd" mustEvaluate="true" directOutput="false">
 <field name="inA" type="SFInt32" accessType="inputOnly"/>
 <field name="inB" type="SFInt32" accessType="inputOnly"/>
 <field name="outResult" type="SFInt32" accessType="outputOnly"/>
 <![CDATA[
  ecmascript:
   var a, b;
   function initialize() {
   	a = 0; b = 0;
   }
   function inA( value, timestamp ) { a = value;  }
   function inB( value, timestamp ) { b = value;  }
   function eventsProcessed() {
   	outResult = a + b;
   }
 ]]></Script>
				
Download als X3D-Datei

Scripting: Java

Java als ScriptspracheJava as Scripting Language

  • Java kann als Scriptsprache verwendet werdenJava can also be used as scripting language
  • Nicht inline, nur über Verweis auf Klassendatei (.class) über url-FeldIt can only be used by pointing to a corresponding classfile (.class) using the url-field, inline definitions are not possible for Java
  • Deklaration der Felder wie bei JavaScript-SkriptknotenThe field declarations are exactly the same as for JavaScript
  • Zugriff auf die Felder durch explizite API: SAI (Beispiel folgt)Inside Java, access to the fields is handled by an explicit API called SAI (example follows)
  • Entsprechend wird ein Java-Interface benötigt, bei InstantReality instantreality.jar (meist im Bin-Verzeichnis der Installation)Accordingly a Java library is required, called instantreality.jar for InstantReality, which is located in the binary directory of the InstantReality installation
    • Interface angelehnt an den Vorgänger für VRMLThe Java interface is adapted from the original interface for VRML
    • Packages vrml, vrml.field, vrml.node

Scripting: Java

Das Java InterfaceThe Java Interface

  • Aufbau ähnlich dem JavaScript InterfaceStructure is similar to the interface for JavaScript
    • public void initialize() {}: wird beim Initialisieren des Scripts aufgerufenis called when the script is initialized
    • public void prepareEvents() {}: wird vor der Verarbeitung eingehender Events aufgerufenis called before individually events are posted to the script
    • public void eventsProcessed() {}: wird nach der Verarbeitung eingehender Events aufgerufenis called when all events have been processed for this iteration
    • public void shutdown() {}: wird beim Beenden des Scripts aufgerufenis called whenever the script is removed from the scenegraph
  • Zusätzlich nochIn addition
    • public void processEvent(Event e) {}: wird jedesmal aufgerufen, wenn ein Feldwert geändert wirdis called every time a field value has been changed, replaces the named functions that are automatically called in JavaScript

Scripting: Java

Beispiel für Scripting mit Java, analog zum JavaScript BeispielExample for scripting in Java, replicating the example in JavaScript


public class MyAddNode extends vrml.node.Script {
  int a, b;
  SFInt32 output;
  public void initialize() {
    a = 0; b = 0;
    output = (SFInt32) getEventOut("outResult");
  }
  public void processEvent(vrml.Event event)
  {
    if( event.getName().equals("inA") ) {
      a  = ((ConstSFInt32) event.getValue()).getValue();
    }
    if( event.getName().equals("inB") ) {
      b  = ((ConstSFInt32) event.getValue()).getValue();
    }
  }
  public void eventsProcessed() {
    output.setValue( a + b );
  }
}
				

Scripting: Java

Was gilt es zu beachten? Typische Probleme mit Java als ScriptspracheThings to keep in mind when scripting with Java:

  • Jeder Java-Skriptknoten läuft in eigener Sandbox mit eigenem Classloader (zumindest in InstantReality)Each scriptnode in Java uses its own sandbox and classloader (at least in InstantReality)
    • Problematisch bei der Verwendung von JNIThis might be problematic when using JNI, as DLLs can only be loaded once per process
    • Achtung bei der Verwendung von Singletons und anderen statischen Variablen! Zwischen den Knoten kann damit keine Kommunikation abgewickelt werden.Think twice when using singleton patterns or static variables, they are shared within one scriptnode but not across two script nodes! Even if the nodes point to the same class.
  • Da Java-Skriptknoten in der Sandbox laufen, müssen Ausnahmen, wie für den Zugriff auf das Dateisystem oder das Öffnen von Ports, explizit in der java_policy freigegeben werden.As Java scriptnodes run in the sandbox, corresponding policies have to be set for accessing the filesystem or for opening ports to web services explicitly in the java_policy file.

Scripting: Java

Was gilt es zu beachten? Typische Probleme mit Java als ScriptspracheThings to keep in mind when scripting with Java:

  • Die Aufrufe der Knoten-Interfacefunktionen (initialize, shutdown, processEvent, ...) erfolgen im Thread des jeweiligen X3D BrowsersCalls to the functions of the node interface (initialize, shutdown, processEvent, ...) are executed in the thread of the X3D browser
    • Direkte Zugriffe auf Knoten/Felder und das Browser-Objekt sind nur in diesem Thread erlaubt!A direct access to nodes or fields and to the browser object are only allowed and safe in this thread context!
    • Zugriffe aus anderen Java-Threads (die möglich sind) können im besten Fall das System stark ausbremsen, im schlimmsten Fall jedoch zu Speicherfehlern und Ausnahmen führen.Access to such objects from other Java threads (technically possible) will in the best case slow down the system (as they require intensive locking) or, in the worst case, will lead to memory errors exceptions
    • Dies gilt insbesondere für System.out/err Aufrufe, die in die Console im Browser umgeleitet werden.This is in particular relevant for calls to System.out/err, which might be re-directed to the graphical console of the browser.

Scripting: Remote

Andocken externer ProzesseConnecting External Processes

  • Über das VRML External Authoring Interface (EAI) können auch externe Prozesse angedockt werdenUsing the VRML External Authoring Interface (EAI) external processes can connect to the browser
  • In der X3D Spezifikation gibt es auch das X3D Scene Access Interface (SAI), welches aber von InstantReality noch nicht unterstüzt wirdIn the X3D specification there is also the X3D Scene Access Interface (SAI) defined, however, this is not supported by InstantReality yet.
  • InstantReality bietet Implementierungen des EAI für Java und .net InstantReality provides implementations of the EAI for Java and .net (C#, Visual Basic, etc.)
  • API ähnlich der des Skriptknotens, aber nun wird kein *neuer* Knoten implementiert!API is similar to that of scriptnodes, but no *new* node is implemented that could be used in the scenegraph
  • Erster wesentlicher Schritt ist die Herstellung der Verbindung zum X3D BrowserThe first important step is the connection to the X3D browser
java.net.InetAddress address = java.net.InetAddress.getByName("mypc");
vrml.eai.Browser browser = vrml.eai.BrowserFactory.getBrowser(address, 4848);
vrml.eai.Node scriptNode = browser.getNode("myAdd");				
vrml.eai.field.EventOutSFInt32 result = 
    (vrml.eai.field.EventOutSFInt32)scriptNode.getEventOut("outResult");
				

Scripting: MöglichkeitenAlternatives

Weitere Möglichkeiten des Scriptings über Java/JavaScriptAlternative approaches for scripting using Java/JavaScript

  • Bislang nur Zugriff auf den Szenengraph gesehenAt the moment we have only seen how to access the scenegraph
  • Es können aber auch neue Routen über Browser.addRoute() angelegt werdenNew routes can be defined using Browser.addRoute()
  • Erstellen von neuen Teilgraphen über Browser.createVrmlFromString()New subgraphs can be created using Browser.createVrmlFromString()
    • Aber nur in alternativer VRML-Syntax möglichOnly in the alternative VRML-like notation, not described in XML
    • Kann aber über Kommandozeilen-Tool aopt oder online mittels Konverter aus X3D Dateien gewonnen werdenThe XML notation we have learned so far can be converted to the older VRML-like notation using a command line tool called aopt or online using Konverter

Scripting: Weitere MöglichkeitenMore Alternatives

Weitere MöglichkeitenMore Alternatives

  • Distributed Interactive Simulation (DIS)
    • IEEE Standard für physikalische verteilte SimulationenIEEE standard for physically distributed systems
    • wird z.B. in militärischen Simulationen verwendetused, e.g., in military simulations
    • von InstantReality derzeit keine volle Unterstützungcurrently not fully supported in InstantReality
  • Remote JavaScript/AJAX
    • Unter Verwendung von XMLHttpRequest in einem JavaScript-Skriptknoten können JavaScript Fragmente im AJAX-Stil von einem externen Server geladen werden.Using an XMLHttpRequest in a JavaScript scriptnode new fragments of JavaScript can be delivered by a HTTP-server and be loaded and executed dynamically.
  • Szenengraph ganz/teilweise überschreibenFull or partly replacement of a scenegraph
    • Bei einer Benutzerinterkation könnte der Szenengraph auch teilweise/vollständig ersetzt werdenTo realize a user interaction it is also possible to replace the current scenegrap or parts of it
    • Dabei wird der neue Graph dann den alten ersetzenThe new graph will then replace the older
    • Die Veränderungen können dann extern mit beliebiger Sprache erstellt werdenThe file representing the new subgraph can be created in principle with any language
    • Alternative für komplexe Modelländerungen bzw. die Anbindung externer SoftwareThis is a viable alternative for complex changes to modules or for the connection of external software

ZusammenfassungSummary

ZusammenfassungSummary

Termin 05 - Funktionale ModellierungAppointment 05 - Functional Modelling

  • Umsetzung von funktionalen Elementen in der SimulationModelling functional elements in a simulation
  • Funktionale Modellierung in X3DFunctional modelling in X3D
    • Einführung in die wesentlichen Techniken der funktionalen ModellierungIntroduction to the basic techniques for functional modelling
    • FelderFields
    • RoutenRoutes
    • SkripteScripts

AusblickOutlook

Termin 06 - InteraktionAppointment 06 - Interaction

  • BasisinteraktionenFundational Interactions
    • Navigation
    • SelektionSelection
    • Manipulation
  • Evaluation von InteraktionstechnikenEvaluation of interaction techniques
  • Anbindung von InteraktionsgerätenConnection of interaction devices
  • InstantIO: Integration von Geräten in den Szenengraphen mit X3DInstantIO: Integration of devices in the scenegraph of X3D