|
JLI Spieleprogrammierung
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 11.01.2008, 01:29 Titel: Kollisionsabfrage: OBB mit OBB |
|
|
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? _________________ Kein Rückzug! Kein Aufgeben! |
|
Nach oben |
|
|
LeeDiGer Super JLI'ler
Anmeldedatum: 31.08.2003 Beiträge: 366 Wohnort: Duisburg Medaillen: Keine
|
Verfasst am: 12.01.2008, 15:16 Titel: |
|
|
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 |
|
|
|
|
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
|