Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

© Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Benutzer Interaktion (interaction): die virtuelle Welt reagiert auf Benutzer Eingaben.

Ähnliche Präsentationen


Präsentation zum Thema: "© Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Benutzer Interaktion (interaction): die virtuelle Welt reagiert auf Benutzer Eingaben."—  Präsentation transkript:

1 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Benutzer Interaktion (interaction): die virtuelle Welt reagiert auf Benutzer Eingaben Animation die virtuelle Welt verändert sich im Laufe der Zeit Indirekte Auswirkungen von Benutzer Eingaben (billboard Verhalten) Stimulus Änderung bewirkt

2 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Nicht im Tutorial: Feststellen von Kollisionen

3 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion (billboard = Reklametafel) sehr detaillierte Geometrien werden zu Texturen vereinfacht. Behavior sorgt dafür, daß die Tafel unabhängig vom Sichtwinkel immer senkrecht zum Beobachter steht Reklametafel Verhalten LOD Verhalten Je näher der Betrachter den Dingen kommt, desto detaillierte visual object Geometrien werden verwendet. Behavior schaltet automatisch zwischen den unterschiedlichen Detaillierungsgraden (level of detail - LOD) um

4 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Die Klasse Behavior Interaktion Animation

5 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion -> drei Methoden implementieren: initialize processStimulus Konstruktor Verhaltensklassen selbst programmieren behavior ist abstrakte Klasse - stellt Referenz zum object of change her - aufgerufen wenn live - Anfangstrigger Ereignis (WakeupCondition Objekt) spezifizieren Methode: wakeupOn( ) - aufgerufen wenn Trigger Ereignis, - Ereignis entschlüsseln, - object of change ändern - Trigger erneut setzen !!

6 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion import java.awt.event.*; import java.util.Enumeration; class SimpleBehavior extends Behavior{ private TransformGroup targetTG; private Transform3D rotation = new Transform3D(); private double angle = 0.0; SimpleBehavior(TransformGroup targetTG){ this.targetTG = targetTG; } void initialize(){ this.wakeupOn(new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED)); } void processStimulus(Enumeration criteria){ angle = angle + 0.1; rotation.rotY(angle); targetTG.setTransform(rotation); this.wakeupOn(new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED)); }

7 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Ausführungsbegrenzung (execution culling) Nur wenn sich activation volume der ViewPlatform und scheduling bonds des Behavior schneiden, wird das Verhalten ausgeführt Einfügen des Verhaltens Objekts in den Szene Graphen vrgl. folgendes Programmfragment

8 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion BranchGroup createSceneGraph() { BranchGroup objRoot = new BranchGroup(); TransformGroup objRotate = new TransformGroup(); objRotate.setCapability(TransformGroup.ALLOW_TRANSFORM_WRITE); objRoot.addChild(objRotate); objRotate.addChild(new ColorCube(0.4)); SimpleBehavior myRotationBehavior = new SimpleBehavior(objRotate); myRotationBehavior.setSchedulingBounds(new BoundingSphere()); objRoot.addChild(myRotationBehavior); objRoot.compile(); return objRoot; } objRotate Objekt wird erst im Behavior eine rotierende TransformGroup !

9 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Welches Problem könnte mit dieser Aufhängung des Behavior Objekts auftreten, wenn nicht rotiert sondern translatiert wird ?

10 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Bounds Objekt des Behavior Objekts scheduling Bereich activation volume der ViewPlatform Solange sich activation volume und scheduling Bereich schneiden, ist das Verhalten aktiv

11 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Bounds Objekt des Behavior Objekts scheduling Bereich activation volume der ViewPlatform Würfel wird immer noch bewegt, selbst wenn er gar nicht mehr gesehen wird

12 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Bounds Objekt des Behavior Objekts scheduling Bereich activation volume der ViewPlatform Würfel kann nicht mehr bewegt werden, obwohl der Benutzer ihn sehen kann

13 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion 1. Lösung: 2. Lösung: Einsatz von BoundingLeaf void setSchedulingBoundingLeaf(BoundingLeaf bl)

14 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Performanz Fallen Memory Burn: Unnötiges Erzeugen von Objekten. Bsp.: in processStimulus die Verwendung von new. Garbage Collector vernichtet alte Objekte -> Zeichnen wird unterbrochen Objekte nach Möglichkeit wiederverwenden. Unnötige Trigger Aufrufe Es gibt eine Methode, die den Trigger bei jedem Neuzeichnen des Bilds (rendering) aufruft. Dies ist oft nicht nötig.

15 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Weitere Methoden von Behavior void postId(int postId) WakeupOnBehaviorPost Verkettet Behavior void setEnable(boolean state) Möglichkeit Behavior auf inaktiv zu setzen, auch wenn es eigentlich aktiv ist View getView() Es kann viele View Objekte geben, die das Verhalten aktivieren. Aber es gibt einen primary View (der erste, der mit einer live Platform verknüpft wird). An diesem richtet sich das Verhalten (z.B. billboard) aus. getView liefert den primary View

16 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Aufwach Bedingungen

17 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Triggermechanismus eines Verhaltens Behavior Objekt WakeupCondition Objekt: WakeupOnAWTEvent processStimulus Methode wird ausgelöst KeyEvent.KEY_PRESSED Trigger

18 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Triggermechanismus zwischen verschiedenen Verhalten (Wache auf bei Post vom Behavior) WakeupCondition Objekt: WakeupOnBehaviorPost postID(1) Behavior Objekt B Behavior Objekt A processStimulus Methode wird ausgelöst Trigger

19 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Beispiel Tastendruck: -> Tür öffnet sich Erneueter Tastendruck: -> Tür schließt sich

20 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion class OpenBehavior extends Behavior{ private TransformGroup targetTG; private WakeupCriterion pairPostCondition; private WakeupCriterion AWTEventCondition; OpenBehavior(TransformGroup targetTG){ this.targetTG = targetTG; AWTEventCondition = new WakeupOnAWTEvent(KeyEvent.KEY_PRESSED); } public void setBehaviorObjectPartner(Behavior behaviorObject){ pairPostCondition = new WakeupOnBehaviorPost(behaviorObject, 1); } public void initialize(){ this.wakeupOn(AWTEventCondition); } public void processStimulus(Enumeration criteria){ if (AWTEventCondition.hasTriggered()){ // make door open -- code excluded this.wakeupOn(pairPostCondition); postId(1); } else { this.wakeupOn(AWTEventCondition); } Dekodieren: Wer hat getriggert: Taste oder anderes Behavior Triggern des anderen Behavior CloseBehavior hat analogen Code (auch mit postID = 1 !)

21 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion TransformGroup doorTG = new TransformGroup(); OpenBehavior openObject = new OpenBehavior(doorTG); CloseBehavior closeObject = new CloseBehavior(doorTG); openObject.setBehaviorObjectPartner(closeObject); closeObject.setBehaviorObjectPartner(openObject); // Setze scheduling bounds für behavior Objekte -- code excluded Innerhalb einer Methode, die den Szene Graph zusammenbaut:

22 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Kollisionsdetektion - weites Thema WakeupOnCollisionEntry WakeupOnCollisionMovement WakeupOnCollisionExit Wenn 2 Objekte kollidieren Wenn 2 Objekte sich während der Kollision bewegen Wenn 2 Objekte die Kollision beenden - Kollision kann so schnell sein, dass kein Trigger ausgelöst wird - Für ein Objekt kann zu einer Zeit nur eine Kollision behandelt werden WakeupOnCollision*( Bounds Node ScreneGraphPath [, int] USE_BOUNDS USE_GEOMETRY ) [, int]

23 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Weiteres Aufwachen WakeupOnDeactivation() WakeupOnElapsedFrames(int frameCount) WakeupOnElapsedTime(long milliseconds) activation volume und scheduling bounds ohne Schnitt WakeupOnSensorEntry / Exit(Bounds...) Sensor ist ein beliebiges Eingabegerät außer Tastatur und Maus WakeupOnTransformChange(TransformGroup...) Hier kann auch Verhalten mit einem Utility Verhalten koordiniert werden WakeupOnViewPlatformEntry / Exit(Bounds...)

24 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Kombination von Aufwachbedingungen WakeupOn*

25 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Der Beobachter wird durch die Virtuelle Welt bewegt Behavior Bewegen der View Platform Wie kommt man beim SimpleUniverse an die Transform Group der View Platform ? Frage:

26 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Bewegen der View Platform ViewingPlatform vp = su.getViewingPlatform; TransformGroup vpt = vp.getViewPlatformTransform(); Mit dieser TransformGroup kann der Beobachter rotiert und verschoben werden su ist ein SimpleUniverse Objekt

27 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion AWTEvent Tastendruck Verhaltens Utility Klassen für die Tastatur Navigation processStimulus(...) abstrakte Klasse Behavior implementiert KeyNavigatorBehavior KeyNavigator bedient sich Konstruktur nimmt (nur) TransformGroup entgegen (wird vom Programmierer nicht beeinflußt) wertet aus

28 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Verhalten des KeyNavigatorBehavior

29 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Verhaltens Utility Klassen für die Maus Navigation abstrakte Klasse MouseBehavior MouseRotate MouseTranslate MouseZoom implementieren zu benutzen setTransformGroup(TransformGroup...) MouseBehaviorCallback Interface zu implementieren: transformChanged(int type, Transform3D...) BenutzerMouseBehaviorKlasse die transformChanged Methode dieser Klasse wird aufgerufen, wenn die MouseTranslate Klassen aktiviert werden type = MOUSE_ROTATE,... setupCallback(MouseBehaviorCallback...)

30 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Customizing der Maus Navigation Möglichkeit A:Implementieren einer eigenen MouseBehavior Klasse (Extension von MouseBehavior) Möglichkeit B:Ableiten von MouseBehavior*, Überschreiben von transformChanged Möglichkeit C:Registrieren bei einer MouseBehavior* Klasse, implementieren vom Interface MouseBehaviorInterface d.h. der Methode transformChanged

31 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Anklicken oder Picking Das naheste Objekt wird selektiert (oder eine Liste mit geschnittenen Objekten wird geliefert) Der scene graph des selektierten Objekts wird zurückgeliefert (um z.B. den Knoten auszusuchen,der geändert werden soll, z.B. TransformGroup für Rotieren)

32 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Performanz Aspekte des Picking Schnittpunktsberechnung ist aufwendig Node Methode setPickable(boolean pickable)- wirkt auch auf alle Kinder ENABLE_PICK_REPORTING capability eines Node Objekts: dieser Node wird im zurückgelieferten scene graph path auf jeden Fall aufgeführt. - Sonst nur, wenn er zur eindeutigen Identifizierung des path benötigt wird. Im Konstruktor: USE_BOUNDS, oder USE_GEOMETRY

33 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Beschränkung des pick testing auf den Teil des scene graph, der in Frage kommt: in pick utility Klassen kann eine Wurzel eines Untergraphen angegeben werden, der nur untersucht wird. Er sollte möglichst ausschließlich pickable Objekte enthalten. PickRotateBehavior behavior = new PickRotateBehavior(root, canvas, bounds); root.addChild(behavior); Pick Utility Klassen Wo die Maus sich bewegt

34 © Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Bei picks gehts noch weiter: noch nicht gemacht: S.46 bis 58


Herunterladen ppt "© Prof. Dr. H. Gläser, Graphische Datenverarbeitung Benutzer Interaktion Benutzer Interaktion (interaction): die virtuelle Welt reagiert auf Benutzer Eingaben."

Ähnliche Präsentationen


Google-Anzeigen