JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

 
 FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen 
 medals.php?sid=adcac9b68bdbaeddf4f970ceeb95a308Medaillen   RegistrierenRegistrieren   ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin 

Kollisionsabfrage: OBB mit OBB

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 11.01.2008, 02:29    Titel: Kollisionsabfrage: OBB mit OBB Antworten mit Zitat

Ich habe versucht eine Funktion für deine OBB mit OBB Kollision zu implementieren. Diese basiert auf einen Separationsachsentest (von Gottschalk, Lin, Manocha: 1996 Seite 174). Vielleicht kennt jemand diese Funktion.

Man muss nur jeweils eine OBB Struktur beider Objekte, die auf Kollisions zu überprüfen sind übergeben und bekommt einen Booleschen Wert zurück.

Die OBB Struktur könnte folgendermaßen aussehen:
CPP:
struct COBB
{
   float      fA1, fA2, fA3; // Ausdehnung von Mitte in X,Y,Z Richtung
   D3DXVECTOR3  vA1, vA2, vA3; // Vektoren-Achsen X,Y,Z
   D3DXVECTOR3  vMittelpkt;    // Mittelpunkt (Zentrum) der Box
};


Nun habe ich Probleme, die richtigen Werte für die OBB Struktur zu initialisieren. Dabei habe ich folgendes probiert:

Code:
OBB.vMittelpkt = m_vPosition + (m_vMaxBounds + m_vMinBounds) /2.0f;
OBB.fA1 = m_vMaxBounds.x - (m_vMaxBounds.x + m_vMinBounds.x) /2.0f;
OBB.fA2 = m_vMaxBounds.y - (m_vMaxBounds.y + m_vMinBounds.y) /2.0f;
OBB.fA3 = m_vMaxBounds.z - (m_vMaxBounds.z + m_vMinBounds.z) /2.0f;
OBB.vA1 = RotationVektorX;
OBB.vA2 = RotationVektorY;
OBB.vA3 = RotationVektorZ;
 


Dabei sind:
- m_vPosition: Positionsvektor des Objektes (Translationsvektor)
- m_vMaxBounds: Max-Vektor der Boundingbox (ermittelt mit D3DXComputeBoundingBox)
- m_vMinBounds: Min-Vektor der Boundingbox (ermittelt mit D3DXComputeBoundingBox)
- RotationVektorX: X-Rotationsachse (1. Spaltenvektor der Worldmatrix)
- RotationVektorY: Y-Rotationsachse (2. Spaltenvektor der Worldmatrix)
- RotationVektorZ: Z-Rotationsachse (3. Spaltenvektor der Worldmatrix)

Bei den hier aufgeführten Werten bin ich mir sicher, dass diese Korrekt sind. Nur bei der Übergabe an die OBB müsste irgendwo ein Fehler sein, aber was könnte das sein?



Edit:
So, hab neue Erkenntnisse: Wenn ich die X-Files beim erstellen in einem 3D-Programm genau in der Mitte zentriere, dass dieser Mittelpunkt genau mit dem Mittelpunkt der Bounding Box übereinstimmt, dann klappt alles.

Aber eigentlich dachte ich, dass ich mit dem oben aufgeführten Code, das Problem korrekt berücksichtigt habe...oder etwa doch nicht? Confused
_________________
Kein Rückzug! Kein Aufgeben!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
LeeDiGer
Super JLI'ler



Anmeldedatum: 31.08.2003
Beiträge: 366
Wohnort: Duisburg
Medaillen: Keine

BeitragVerfasst am: 12.01.2008, 16:16    Titel: Antworten mit Zitat

Für alle, die sich noch für das Problem interessieren:
Ich hätte den Vektor "(m_vMaxBounds + m_vMinBounds) /2.0f" mit der Rotationsmatrix des Objektes transformieren sollen, das die Verschiebung des im X-File definierten Mittelpunkt vom Zentrum de OBB ja auch die Rotation berücksichtigt, dann funktionierts wieder einwandfrei.
_________________
Kein Rückzug! Kein Aufgeben!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL Alle Zeiten sind GMT
Seite 1 von 1

 
Gehe zu:  
Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.


Powered by phpBB © 2001, 2005 phpBB Group
Deutsche Übersetzung von phpBB.de

Impressum