www.jammni.de

Logo - Kleiner Drache
Login
Username:

Passwort:

Daten merken
Auto-Login
Registrieren
 
Online
niemand
 
Forumsuche
Suche nach:

Logo - DracheDirectX-Forum

DerHulk

Gepostet:
13.02.2006 20:58

Kollisionen  
Hi, leutz ich komm mal wieder mit einer leicht gestellten frage vorbei, die wahrscheinlich um so schwieriger zu beantworten ist.Smilie..eigendlich besagt die überschrift da schon alles!Thema sind Kollisionen...will imgrunde "nur" wissen wie ich es abfrage das zwei Sprites(müssen nicht zwingend Sprites,sein objekte) kollidiert bzw sich in einen Punkt(pixel) treffen, wie geht man da an die Sache dran? THX!
MFG Der HULK!
Zum Seitenanfang    
 
Jammni

Gepostet:
13.02.2006 22:10

   
Naja, eigentlich läuft das immer nach demselben Algorithmus ab:
Du testest für jedes Objekt, ob es mit einem anderen Objekt kollidiert - also in der Regel zwei verschachtelte for-Schleifen.
Die einfachste Möglichkeit ist es nun, die beiden Objekte mit einem Hüllkreis bzw. bei 3D-Objekten mit einer Hülkugel zu umgeben. Dazu bietet es sich an, einfach einen Mittelpunkt zu definieren und den größtmöglichen Abstand eines Punktes als Radius des Kreises / der Kugel anzunehmen. Wenn du das für beide Objekte gemacht hast, dann kannst du ganz einfach über Pythagoras den Abstand zwischen den beiden Mittelpunkten berechnen. Ist der Abstand nun kleiner als die Radien der beiden Kreise / Kugeln, so liegt bereits das eine Objekt teilweise in dem anderen Objekt und du hast eine Kollision entdeckt.

Ich hoffe das reicht dir soweit erstmal, dass du weißt, wie du da ran gehen musst.
Zum Seitenanfang Homepage   ICQ    
 
DerHulk

Gepostet:
20.02.2006 19:04

   
Hi Leutz! Ich komme da nicht wirklich weiter!Allso der Vorschlag mit "der Groben Kollision" ist ja ok aber für das was ich mir Vorstelle einfach zu Ungenau! Eine Pixel Genaue "Feine Kollison" währe da schon besser! Habt ihr da nicht Idee wie sich sowas umsetzen lassen könnte? MFG der Hulk?!

P.S

Mit Verwendung von DirectDraw ist dies woll möglich aber das wird ja wohl nicht mehr unterstütz, sollte man es dann doch verwenden?!
Zum Seitenanfang    
 
Jammni

Gepostet:
21.02.2006 12:49

   
Ich nehme mal, du brauchst die pixelgenaue Kollisionserkennung dann für Sprites.
Hab dir da mal ein Post aus einem anderen Forum herausgesucht, leider aber für DirectX7 und nicht in Managed Code: http://www.zfx.info/DisplayThread.php?TID=19586
Alternativ zu der Bounding Box von oben kannst du allerdings bei Sprites noch ein anderes Verfahren anwenden, welches aber nicht minder anstrengend und rechenintensiv ist.
Und zwar musst du bei jedem Sprite gucken, ob eine Ecke des Sprites in irgend ein anderes Sprite reichen würde. Wenn du das so machst, musst du allerdings aufpassen, dass du keine so großen Verschiebungen der Sprites machst, dass ein Sprite ein anderes soweit überlappt, dass keine Ecke mehr in dem anderen Sprite ist.

Im Zweifelsfall kann ich mich auch mal ransetzen und dir eine entsprechende Funktion für letztgenannten Algorithmus schreiben. Dauert dann aber 2-3 Tage, da ich total faul bin und wenig Zeit habe ;-)
Zum Seitenanfang Homepage   ICQ    
 
DerHulk

Gepostet:
21.02.2006 22:30

   
Hi, erstmal THX!Find es echt cool das dich da reinhängen würdest!(keine Sorge habe noch nicht aufgegeben Smilie , und deine Zeit will ich dir auch nicht unnötig stehlen)
Jedoch könntest das mit den Ecken was genauer erklären, verstehe da nicht wie sich das Verhalten soll bei Sprites wo ich die Farberausfilter?

Zum Seitenanfang    
 
Jammni

Gepostet:
23.02.2006 18:26

   
Naja, näher erklären kann ich das auch nicht. Wenn, dann würde ich es auch gleich programmieren. Das Problem, welches du wahrscheinlich bei den Sprites noch haben wirst, dass sind die Alphawerte. Dadurch wirst du natürlich keine Rechtecke mehr haben, bei denen eine einfache Kollisionserkennung noch möglich wäre.
Mir ist soweit auch kein effizientes Verfahren bekannt, was in einem solchen Fall greift.
Wenn dir also wirklich ein pixelgenaues Abfragen wichtig ist (auch mit transparenten Stellen), dann wirst du wohl nicht umhin kommen, die Koordinaten zu vergleichen. Aber das ist zum einen sehr mühselig und zum anderen auch sehr rechenintensiv bei vielen Sprites.
Zum Seitenanfang Homepage   ICQ    
 
DerHulk

Gepostet:
02.03.2006 21:27

   
Habe hier was aus einem andren Forum:

http://www.geometrictools.com/Intersection.html

kann einem evtl. weiterhelfen!
(Für mich persönlich immer noch nicht genau genug Smilie
aber ich arbeite dran )
Zum Seitenanfang    
 
Jammni

Gepostet:
02.03.2006 22:20

   
Tja, da ist für dich wahrscheinlich genau dasselbe Problem. Die Prüfen nur, ob geometrische Objekte kollidieren. Aber eine Pixel-für-Pixel-Kollisionserkennung machen sie da auch nicht. Ist eben sehr ineffizient und deswegen behilft man sich mit den etwas gröberen Boxen.

Aber du kriegst das sicherlich noch hin ;-)
Zum Seitenanfang Homepage   ICQ