JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Pixelgenaue Kollision Problem

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


Alter: 36
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 15.02.2004, 18:52    Titel: Pixelgenaue Kollision Problem Antworten mit Zitat

Hallo
ICh weiß das es nicht so erwünscht ist einen Code reinschreiben und
einfach fragen wo ist der Fehler.
Aber ich Probiere schon sehr sehr lange herum um dem Fehler zu finden.
Leider kein erfolg darum könnt vieleicht von euch jemand den Fehler
mir mitteilen.
Der Fehler ist das die Pixelgenauekollision nicht funktioniertj denn
wenn die xpos vom jet und die xpos vom object gleichgroß sind trit eine Fehlermeldung auf warum

bool KOLLISION::PixelGenau(OBJECT object1,OBJECT object2)
{
LPDIRECT3DTEXTURE9 texture1;
texture1 = object1.getShownTexture();
LPDIRECT3DTEXTURE9 texture2;
texture2 = object2.getShownTexture();
int xpos1,ypos1,xpos2,ypos2;
xpos1 = object1.getxPos();
ypos1 = object1.getyPos();
xpos2 = object2.getxPos();
ypos2 = object2.getyPos();

D3DSURFACE_DESC desc1,desc2;
texture1->GetLevelDesc(0,&desc1);
texture2->GetLevelDesc(0,&desc2);
D3DLOCKED_RECT LockRect1,LockRect2;

texture1->LockRect(0,&LockRect1,0,D3DLOCK_READONLY);
int nPitch1 = LockRect1.Pitch/4;
D3DCOLOR* Pixel1 = (D3DCOLOR*) LockRect1.pBits;
texture2->LockRect(0,&LockRect2,0,D3DLOCK_READONLY);
int nPitch2 = LockRect2.Pitch/4;
D3DCOLOR* Pixel2 = (D3DCOLOR*) LockRect2.pBits;

for(int y = 0;y<desc1.Height;y++)
{
for(int x = 0;x<desc1.Width;x++)
{

D3DCOLOR PixelColor1 = Pixel1[y * nPitch1 +x];


if(!(PixelColor1 == D3DCOLOR_ARGB(255,0,0,0)))

{

int PixelxPos1 = x + xpos1;

int PixelyPos1 = y + ypos2;


if(PixelxPos1 > xpos2 && PixelxPos1 < (xpos2 + desc2.Width) && PixelyPos1 > ypos2 && PixelyPos1 < (ypos2+desc2.Height))

{

int PixelxPos2 = PixelxPos1 - xpos2;

int PixelyPos2 = PixelyPos1 - ypos2;



D3DCOLOR PixelColor2 = Pixel2[PixelyPos2 * nPitch2 + PixelxPos2];

if(!(PixelColor2 == D3DCOLOR_ARGB(255,0,0,0)))

{

texture1->UnlockRect(0);

texture2->UnlockRect(0);

return TRUE;

}


}


}


}

}



texture1->UnlockRect(0);

texture2->UnlockRect(0);




return FALSE;

};
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
TheMillenium
Dark JLI'ler



Anmeldedatum: 21.07.2002
Beiträge: 1427
Wohnort: World
Medaillen: Keine

BeitragVerfasst am: 16.02.2004, 14:44    Titel: Antworten mit Zitat

erstmal würde ich zeiger übergeben, sonst kann das bei vielen Objekten eine sehr langsaaame Angelegenheit ergeben Wink
_________________
The source of all power is in its destiny...
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Florian
Super JLI'ler


Alter: 36
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 17.02.2004, 15:33    Titel: Antworten mit Zitat

Hallo
ich glaube ich habe denn Fehler gefunden er liegt bei PixelColor1.
PixelColor1 hat immer den Wert Null.Er soll aber den D3DCOLOR wert für
Schwarz haben
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Fallen
JLI MVP
JLI MVP


Alter: 40
Anmeldedatum: 08.03.2003
Beiträge: 2860
Wohnort: Münster
Medaillen: 1 (mehr...)

BeitragVerfasst am: 17.02.2004, 15:58    Titel: Antworten mit Zitat

D3DCOLOR_ARGB(0,0,0,0) = 0; wie du schon in ICQ sagtest Wink
0 = 0x00000000
_________________
"I have a Core2Quad at 3.2GHz, 4GB of RAM at 1066 and an Nvidia 8800 GTS 512 on Vista64 and this game runs like ass whereas everything else I own runs like melted butter over a smokin' hot 18 year old catholic schoolgirl's arse."
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
=]Mid[=]Night[=
Super JLI'ler



Anmeldedatum: 20.11.2002
Beiträge: 380
Wohnort: Aachen
Medaillen: Keine

BeitragVerfasst am: 17.02.2004, 16:10    Titel: Antworten mit Zitat

Na ja, wenn der Pixel undurchsichtig sein soll eigentlich 0xFF000000
(vielleicht brauchst du den Alphakanal aber auch nicht)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Florian
Super JLI'ler


Alter: 36
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 17.02.2004, 17:38    Titel: Antworten mit Zitat

Hallo ich habe das mit den Albhakanal probiert funktioniert doch noch nicht
Vieleich erkläre ich mal wie ich es mir Vorgestelt habe wie die Funkttionieren gehen soll.
Als erster hole ich mir alle benötigten daten von xypos der Objecte und die Texturen nachher Locke ich die texturen.
Mit den For Schleifen kontrolliere ich Pixel für Pixel ob die PIxelfarbe
Schwarz ist wenn nicht dann wird die PixelPosition berrechnet.
Nachher Wird überprüft ob das Pixel in der 2 Textur liegt wenn ja
dann werden die xypos inerhalb der Textur berrechnet und darauf hin
überprüft ob dieses Pixel auch NICHT Schwarz ist wenn das eintrifft
wird TRUE zurückgegeben fals das Pixel Schwarz ist dann wird
die Schleife wieder widerholt.

Danke Vieleicht ist das Beispiel jetzt leichter zu verstehen
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Florian
Super JLI'ler


Alter: 36
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 17.02.2004, 18:33    Titel: Antworten mit Zitat

Vieleicht noch was beim Ausführen bewege ich den jet.
Wenn die ypos gleich der ypos des Objektes ist dann ist bei meiner Kollisionsabfrage immer eine Kollision das ja nicht stimmt
also da muss was falsch sein die Frage ist nur wo
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> Entwicklung 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