Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

Collision Detection in Java3D Hristo Matev WS 02/03.

Ähnliche Präsentationen


Präsentation zum Thema: "Collision Detection in Java3D Hristo Matev WS 02/03."—  Präsentation transkript:

1 Collision Detection in Java3D Hristo Matev WS 02/03

2 Übersicht Java3D Application Architecture Behavior System Kollisionen Kollisionstypen Collision Avoidance Terrain Following

3 Java3D Applikation Architecture Eigene Threads Nachrichtenaustausch Java3D Thread Scheduler Behavior Thread Scheduler Kein Collision Thread (interne Baumstruktur)

4 Das Behavior System Abstrakte Klasse Behavior Reagieren auf Kollisionen: Position, Aussehen, Hinzufügen/Entfernen, Kameratransformationen

5 Das Behavior System Aufbau einer Klasse 1. Konstruktor 2. Initialize() 3. processStimulus()

6 Kollisionen Kollisionsregionen Kollisionslisten Nur die dunklen Regionen befinden sich in der beobachteten Liste

7 Kollisionen Kamera Bounds (1)

8 Kollisionen Kamera Bounds (2)

9 Kollisionen Kamera Bounds (3)

10 Kollisionen Kamera Bounds Wenn man die Kollision nicht sehen kann, dann kollidieren die Objekte nicht.

11 Kollisionen Die Behaviors werden asynchron mit dem Renderer aufgerufen Wenn diese aufgefufen werden, dann wird es nicht garantiert, dass diese etwas verändern werden Feststellen von Kollisionen – nicht immer (leichte Kollisionen)

12 Abfangen von Kollisionen WakeupOnCollisionEntry WakeupOnCollisionMovement WakeupOnCollisionExit WakeupOnViewPlatformEntry WakeupOnViewPlatformExit

13 Abfangen von Kollisionen Klassenhierarchie

14 Konstruktoren WakeupOnCollisionEntry (Bounds armingBounds) WakeupOnCollisionEntry (Node armingNode) WakeupOnCollisionEntry (Node armingNode, int speedHint)

15 Objektgrenzen Eine große BoundingBox – schnelleres Rendern Komplexe Geometrie – langsames Rendern

16 Objekt-Objekt-Kollisionen WakeupOnCollisionEntry public void initialize (){ this.wakeupOn (new WakeupOnCollisionEntry (t));} public void processStimulus (Enumeration criteria){ System.out.println(Kollision); this.wakeupOn (new WakeupOnCollisionEntry (t)); }}

17 Mehrere Kriterien WakeupCriterion [] conditions = new WakeupCriterion [3]; public void ObjektObjektCollision () { conditions [0] = new WakeupOnCollisionEntry(t); conditions [1] = new WakeupOnCollisionMovement(t); conditions [2] = new WakeupOnCollisionExit(t); }

18 Kamera-Objekt-Kollisionen public void initialize (){ this.wakeupOn (new WakeupOnViewPlatformEntry(b)); } public void processStimulus (Enumeration criteria) { System.out.println(Kollision); this.wakeupOn (new WakeupOnViewPlatformEntry (b)); }

19 Collision Avoidance Collision Avoidance ist ein Mechanismus bei dem man die zukünftige Position basierend auf der momentanen Bewegung des Benutzers ermittelt und vermeidet das der Benutzer zufällig z.B. durch die Wand geht. Java3D stellt aber lediglich ein Collision Detection System zur Verfügung, alles anderes muss vom Programmierer übernommen werden.

20 Collision Avoidance Sachverhalt Wie groß sollen die Bounds Sein?

21 Collision Avoidance (Implementierung) else if (critter instanceof WakeupOnViewPlatformEntry) { System.out.println ("collision entry"); collision = true; gesperrterButton = lastPressedButton; vptg.getTransform (aktuell); }..... if (collision && (gesperrterButton == lastPressedButton)) vptg.setTransform (aktuell);

22 Terrain Following Das Terrain Following beinhaltet die Bewegung von einem Objekt (oder der Kamera) auf einer bestimmten Höhe über die Grundfläche.

23 Terrain Following Terrain Eigenschaften

24 Terrain Following Unerwartete Terrainänderung

25 Terrain Following Scenegraph

26 Terrain Following (Implementierung) PickTool picktool = new PickTool (bg); picktool.setShapeRay (loc, DOWN); picktool.setMode (PickTool.GEOMETRY_INTERSECT_INFO); pr = picktool.pickClosest (); if (pr != null){ PickIntersection pi = pr.getIntersection (0); Point3d intPt = pi.getPointCoordinatesVW (); py = intPt.y; return py;} Picking

27 Terrain Following terrainAenderung = criticalPoint - gespeicherteHoehe; criticalVector.set (0.0,terrainAenderung, 0.0); criticalTransform.set(criticalVector); currentTransform.mul(criticalTransform); vptg.setTransform(currentTransform);

28 Quellen Sun Java3D Api Tutorial j3d.org die java3d Liste: java3d-interest (alle Nachrichten sind unter: mail-archive.com erreichbar)


Herunterladen ppt "Collision Detection in Java3D Hristo Matev WS 02/03."

Ähnliche Präsentationen


Google-Anzeigen