Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
Florian Super JLI'ler
Alter: 36 Anmeldedatum: 20.06.2003 Beiträge: 302
Medaillen: Keine
|
Verfasst am: 15.02.2004, 18:52 Titel: Pixelgenaue Kollision Problem |
|
|
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 |
|
|
TheMillenium Dark JLI'ler
Anmeldedatum: 21.07.2002 Beiträge: 1427 Wohnort: World Medaillen: Keine
|
Verfasst am: 16.02.2004, 14:44 Titel: |
|
|
erstmal würde ich zeiger übergeben, sonst kann das bei vielen Objekten eine sehr langsaaame Angelegenheit ergeben _________________ The source of all power is in its destiny... |
|
Nach oben |
|
|
Florian Super JLI'ler
Alter: 36 Anmeldedatum: 20.06.2003 Beiträge: 302
Medaillen: Keine
|
Verfasst am: 17.02.2004, 15:33 Titel: |
|
|
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 |
|
|
Fallen JLI MVP
Alter: 40 Anmeldedatum: 08.03.2003 Beiträge: 2860 Wohnort: Münster Medaillen: 1 (mehr...)
|
Verfasst am: 17.02.2004, 15:58 Titel: |
|
|
D3DCOLOR_ARGB(0,0,0,0) = 0; wie du schon in ICQ sagtest
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 |
|
|
=]Mid[=]Night[= Super JLI'ler
Anmeldedatum: 20.11.2002 Beiträge: 380 Wohnort: Aachen Medaillen: Keine
|
Verfasst am: 17.02.2004, 16:10 Titel: |
|
|
Na ja, wenn der Pixel undurchsichtig sein soll eigentlich 0xFF000000
(vielleicht brauchst du den Alphakanal aber auch nicht) |
|
Nach oben |
|
|
Florian Super JLI'ler
Alter: 36 Anmeldedatum: 20.06.2003 Beiträge: 302
Medaillen: Keine
|
Verfasst am: 17.02.2004, 17:38 Titel: |
|
|
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 |
|
|
Florian Super JLI'ler
Alter: 36 Anmeldedatum: 20.06.2003 Beiträge: 302
Medaillen: Keine
|
Verfasst am: 17.02.2004, 18:33 Titel: |
|
|
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 |
|
|
|