JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Mittelpunktsvektor von Bounding Sphere bzw. Bounding Box

 
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: 10.01.2008, 22:48    Titel: Mittelpunktsvektor von Bounding Sphere bzw. Bounding Box Antworten mit Zitat

Ich wollte für eine Kollisionsberechnung zwischen 2 OBB (orientierte Bounding Boxen) berechnen. Dafür benötige ich jeweils einen Mittelpunktsvektor der Objekte.

Da habe ich zunächst 2 Möglichkeiten gesehen, diesen zu ermitteln:
Entweder mit D3DXComputeBoundingSphere oder D3DXComputeBoundingBox.

1. Bei D3DXComputeBoundingSphere würde ich den Vektor "D3DXVECTOR3 *pCenter" der Funktion nehmen.

2. Bei D3DXComputeBoundingBox würde ich "D3DXVECTOR3 *pMin" und "D3DXVECTOR3 *pMax" benutzen und dann rechnen:
vMittelpunkt = (pMax + pMin) /2.0f

Ich bekomme hier aber jeweils immer 2 unterschiedliche Werte. Dabei dachte ich eigentlich, es müssten bei beiden Möglichkeiten immer derselbe Mittelpunktsvektor rauskommen. Oder unterscheiden sich Mittelpunkt einer Sphere vom Mittelpunkt einer Bounding Box?


Ich habe hier direkt die MSDN Quellen angegeben.

MSDN: D3DXComputeBoundingSphere
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_c_Summer_04/directx/graphics/reference/d3dx/functions/mesh/d3dxcomputeboundingsphere.asp

MSDN: D3DXComputeBoundingBox
http://msdn.microsoft.com/archive/default.asp?url=/archive/en-us/directx9_c_Summer_04/directx/graphics/reference/d3dx/functions/mesh/d3dxcomputeboundingsphere.asp
_________________
Kein Rückzug! Kein Aufgeben!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Chriss
Senior JLI'ler



Anmeldedatum: 18.08.2004
Beiträge: 267

Medaillen: Keine

BeitragVerfasst am: 10.01.2008, 23:38    Titel: Antworten mit Zitat

Box:
pMin
[out] Pointer to a D3DXVECTOR3 structure, describing the returned lower-left corner of the bounding box. See Remarks.

pMax
[out] Pointer to a D3DXVECTOR3 structure, describing the returned upper-right corner of the bounding box. See Remarks

Sphere:
pCenter
[out] D3DXVECTOR3 structure, defining the coordinate center of the returned bounding sphere.




Bedeutet also das du bei der Boundingsphere den Mittelpunkt bekommst und den Radius der Kugel.
Bei der Mox bekommst du die Kante links unten und die kante rechts oben. Also keinen Mittelpunkt, wobei du den ja leicht selber bestimmen kannst.


Grüße
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: 11.01.2008, 18:50    Titel: Antworten mit Zitat

Und der Mittelpunkt der Bounding Box ergibt sich aus:
("Kante links unten" + "Kante rechts oben") /2.0f = Mittelpunkt.

Für mich wäre der Mittelpunkt der Boundingbox auch der Mittelpunkt der Bounding Sphere. Oder seh ich das falsch?


Edit:
Kann es sein, dass diese D3DXComputeBoundingSphere- Funktion ziemlich (sorry für den Ausdruck) Toilette ist?
Der Radius der Bounding Sphere, der von der Funktion zurückgegeben wird, ist immer viel zu groß.

Hab mal überlegt, wie man das zu Fuß berechnet. Wenn man die Maximum- und Minimumvektoren von D3DXComputeBoundingBox hat, dann fallen mir auf anhieb 2 Möglichkeiten ein.

1. Man nimmt die größte Ausdehnung aller 3 Achsen als Radius.
2. Man berechnet Länge der Diagonale des Maximumvektors der Bounding box.

Bei Möglichkeit 1 hätte man die ideale Größe für einen relativ Kugelförmige Mesh, jedoch wäre sie für einen quaderförmigen oder ähnliches Objekt ungeeignet, weil sie dann zu klein wäre.
Möglichkeit 2 um schließt in jedem Fall das Objekt. Jedoch würde man schnell erkennen, dass bei einem Kugelförmigen Mesh die Bounding Sphere zu groß wäre.
Weiß jemand, wie man den optimalen Radius für ein beliebiges Objekt per Hand berechnen könnte oder ob es sonst eine andere Möglichkeit gibt, den exakten Radius zu ermitteln?
_________________
Kein Rückzug! Kein Aufgeben!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
DirectXer
Dark JLI'ler



Anmeldedatum: 05.02.2005
Beiträge: 1201
Wohnort: Köln
Medaillen: Keine

BeitragVerfasst am: 12.01.2008, 17:24    Titel: Antworten mit Zitat

LeeDiGer hat Folgendes geschrieben:
Weiß jemand, wie man den optimalen Radius für ein beliebiges Objekt per Hand berechnen könnte oder ob es sonst eine andere Möglichkeit gibt, den exakten Radius zu ermitteln?

1. du suchst dir den mittelpunkt des Objekts (entweder legst du ihn einfach fest oder berechnest ihn mit allen vertices [ Arrow mathematischer Schwerpunkt])
2. du berechnest die distanz von allen anderen Vertices zu diesem Mittelpunkt und addierst sie zusammen.
3. du teilst diese Summe durch die anzahl vertices, das ist dein Radius

Ansonsten kannst du Bounding Sphere Kollision auch einfach per Hand berechnen, aber das weißt du bestimmt oder? Wenn nicht:
CPP:
bool collision = (v1 - v2).lengthSquare() <= square(r1 + r2)


Gruß DXer
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail 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