collision detection in java3d hristo matev ws 02/03

28
Collision Detection in Java3D Hristo Matev WS 02/03

Upload: wiebe-strahl

Post on 05-Apr-2015

116 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Collision Detection in Java3D Hristo Matev WS 02/03

Collision Detection in Java3D

Hristo Matev WS 02/03

Page 2: Collision Detection in Java3D Hristo Matev WS 02/03

Übersicht

Java3D Application Architecture Behavior System Kollisionen Kollisionstypen Collision Avoidance Terrain Following

Page 3: Collision Detection in Java3D Hristo Matev WS 02/03

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

Page 4: Collision Detection in Java3D Hristo Matev WS 02/03

Das Behavior System Abstrakte Klasse Behavior

Reagieren auf Kollisionen:Position, Aussehen,

Hinzufügen/Entfernen, Kameratransformationen

Page 5: Collision Detection in Java3D Hristo Matev WS 02/03

Das Behavior System

Aufbau einer Klasse

1. Konstruktor2. Initialize()3. processStimulus()

Page 6: Collision Detection in Java3D Hristo Matev WS 02/03

Kollisionen

KollisionsregionenKollisionslisten

Nur die dunklen Regionen befindensich in der beobachteten Liste

Page 7: Collision Detection in Java3D Hristo Matev WS 02/03

Kollisionen

Kamera Bounds (1)

Page 8: Collision Detection in Java3D Hristo Matev WS 02/03

Kollisionen

Kamera Bounds (2)

Page 9: Collision Detection in Java3D Hristo Matev WS 02/03

Kollisionen

Kamera Bounds (3)

Page 10: Collision Detection in Java3D Hristo Matev WS 02/03

Kollisionen

Kamera Bounds

Wenn man die Kollision nicht sehen kann, dann kollidieren die Objekte nicht.

Page 11: Collision Detection in Java3D Hristo Matev WS 02/03

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)

Page 12: Collision Detection in Java3D Hristo Matev WS 02/03

Abfangen von Kollisionen

WakeupOnCollisionEntry WakeupOnCollisionMovement WakeupOnCollisionExit WakeupOnViewPlatformEntry WakeupOnViewPlatformExit

Page 13: Collision Detection in Java3D Hristo Matev WS 02/03

Abfangen von Kollisionen

Klassenhierarchie

Page 14: Collision Detection in Java3D Hristo Matev WS 02/03

Konstruktoren

WakeupOnCollisionEntry (Bounds armingBounds)

WakeupOnCollisionEntry (Node armingNode)

WakeupOnCollisionEntry (Node armingNode, int speedHint)

Page 15: Collision Detection in Java3D Hristo Matev WS 02/03

Objektgrenzen

Eine große BoundingBox – schnelleres Rendern

Komplexe Geometrie – langsames Rendern

Page 16: Collision Detection in Java3D Hristo Matev WS 02/03

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)); }}

Page 17: Collision Detection in Java3D Hristo Matev WS 02/03

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);}

Page 18: Collision Detection in Java3D Hristo Matev WS 02/03

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));}

Page 19: Collision Detection in Java3D Hristo Matev WS 02/03

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.

Page 20: Collision Detection in Java3D Hristo Matev WS 02/03

Collision Avoidance

SachverhaltWie groß sollen die BoundsSein?

Page 21: Collision Detection in Java3D Hristo Matev WS 02/03

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);

Page 22: Collision Detection in Java3D Hristo Matev WS 02/03

Terrain Following

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

Page 23: Collision Detection in Java3D Hristo Matev WS 02/03

Terrain Following

Terrain Eigenschaften

Page 24: Collision Detection in Java3D Hristo Matev WS 02/03

Terrain Following

Unerwartete Terrainänderung

Page 25: Collision Detection in Java3D Hristo Matev WS 02/03

Terrain Following

Scenegraph

Page 26: Collision Detection in Java3D Hristo Matev WS 02/03

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

Page 27: Collision Detection in Java3D Hristo Matev WS 02/03

Terrain Following

terrainAenderung = criticalPoint -

gespeicherteHoehe; criticalVector.set (0.0,terrainAenderung, 0.0); criticalTransform.set(criticalVector); currentTransform.mul(criticalTransform); vptg.setTransform(currentTransform);

Page 28: Collision Detection in Java3D Hristo Matev WS 02/03

Quellen

Sun Java3D Api Tutorial j3d.org

die java3d Liste: java3d-interest

(alle Nachrichten sind unter: mail-archive.com erreichbar)