Collision Detection in Java3D Hristo Matev WS 02/03.

Post on 05-Apr-2015

116 views 0 download

Tags:

Transcript of Collision Detection in Java3D Hristo Matev WS 02/03.

Collision Detection in Java3D

Hristo Matev WS 02/03

Übersicht

Java3D Application Architecture Behavior System Kollisionen Kollisionstypen Collision Avoidance Terrain Following

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

Das Behavior System Abstrakte Klasse Behavior

Reagieren auf Kollisionen:Position, Aussehen,

Hinzufügen/Entfernen, Kameratransformationen

Das Behavior System

Aufbau einer Klasse

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

Kollisionen

KollisionsregionenKollisionslisten

Nur die dunklen Regionen befindensich in der beobachteten Liste

Kollisionen

Kamera Bounds (1)

Kollisionen

Kamera Bounds (2)

Kollisionen

Kamera Bounds (3)

Kollisionen

Kamera Bounds

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

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)

Abfangen von Kollisionen

WakeupOnCollisionEntry WakeupOnCollisionMovement WakeupOnCollisionExit WakeupOnViewPlatformEntry WakeupOnViewPlatformExit

Abfangen von Kollisionen

Klassenhierarchie

Konstruktoren

WakeupOnCollisionEntry (Bounds armingBounds)

WakeupOnCollisionEntry (Node armingNode)

WakeupOnCollisionEntry (Node armingNode, int speedHint)

Objektgrenzen

Eine große BoundingBox – schnelleres Rendern

Komplexe Geometrie – langsames Rendern

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

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

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

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.

Collision Avoidance

SachverhaltWie groß sollen die BoundsSein?

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

Terrain Following

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

Terrain Following

Terrain Eigenschaften

Terrain Following

Unerwartete Terrainänderung

Terrain Following

Scenegraph

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

Terrain Following

terrainAenderung = criticalPoint -

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

Quellen

Sun Java3D Api Tutorial j3d.org

die java3d Liste: java3d-interest

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