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: 04.01.2006, 22:13 Titel: Sprite um 270 Grad rotieren |
|
|
Also ich wollte mal versuchen ein Sprite um 270 Grad zu rotieren.
funktioniert irgendwie nicht. Bis 180 hat alles funktioniert aber ab 180 Grad funktioniert das nicht mehr. Was kann da der Fehler sein.
Ich poste hierzu mal keinen Code denn ich vermute das dieses Problem mit den Winkelfunktionen zusammenhängt. Denn diese gehen ja auch nur bis 180.
Kann mich bitte da mal einer aufklären. THX _________________ Theorie ist, wenn man alles weiss und nichts funktioniert.
Praxis ist, wenn alles funktioniert und keiner weiss warum. |
|
Nach oben |
|
|
Christian Rousselle Site Admin
Alter: 48 Anmeldedatum: 19.07.2002 Beiträge: 1630
Medaillen: Keine
|
Verfasst am: 04.01.2006, 22:22 Titel: |
|
|
Du mußt schon mehr Info posten. Was benutzt du? Drehst du selbst Pixel oder verwendest du ID3DXSprite? Welche DX-Version, es hat sich auch in irgendeinem SDK-Update nochmal was an den D3DX-Sprite Funktionen geändert.... |
|
Nach oben |
|
|
Patrick Dark JLI Master
Anmeldedatum: 25.10.2004 Beiträge: 1895 Wohnort: Düren Medaillen: Keine
|
Verfasst am: 04.01.2006, 22:24 Titel: |
|
|
Fragestellung: "Hallo, ich habe da so ein Teil, das dreh ich um soundsoviel Grad, doch das ist nicht richtig, was mach ich falsch?"
Leser der Fragestellung: "Wat?" _________________ 'Wer der Beste sein will muss nach Perfektion streben und jede Gelegenheit nutzen sich zu verbessern.' - KIA
[ German Game Dev | Boardsuche hilft sehr oft | Google rockt | Wie man Fragen richtig stellt | ICQ#: 143040199 ] |
|
Nach oben |
|
|
Florian Super JLI'ler
Alter: 36 Anmeldedatum: 20.06.2003 Beiträge: 302
Medaillen: Keine
|
Verfasst am: 04.01.2006, 22:28 Titel: |
|
|
ja sry also ich benutze das D3DXSprite Objekt von dem Summer DX.
CPP: | D3DSURFACE_DESC TextureInfo;
//Textrue Größe ermitteln
vlpSpriteTex[iSprite]->GetLevelDesc(0,&TextureInfo);
//Sprite zum Zeichnen vorbereiten
vlpSprite[iSprite]->Begin(D3DXSPRITE_ALPHABLEND);
//Transform Matrix erstellen
D3DXMATRIX mat;
D3DXMatrixTransformation2D(&mat, //Zu erstellende Matrix
NULL,
0,
&D3DXVECTOR2(fScaling,fScaling), //Scaling Wert
&D3DXVECTOR2(TextureInfo.Width/2,TextureInfo.Height/2), //Mitte des Sprites
fRotation, //Rotation Wert
&D3DXVECTOR2(fXPos,fYPos)); //Position des Sprites
//Das Transformation Matrix dem Sprite übergeben
vlpSprite[iSprite]->SetTransform(&mat);
//Sprite Zeichnen
if(FAILED(vlpSprite[iSprite]->Draw(vlpSpriteTex[iSprite],NULL,NULL,NULL,0xFFFFFFFF)))
{
MessageBox(NULL,"Fehler beim Zeichnen des Sprites","CWX_ERROR",NULL);
return FALSE;
}
vlpSprite[iSprite]->End();
|
_________________ Theorie ist, wenn man alles weiss und nichts funktioniert.
Praxis ist, wenn alles funktioniert und keiner weiss warum.
Zuletzt bearbeitet von Florian am 04.01.2006, 22:30, insgesamt einmal bearbeitet |
|
Nach oben |
|
|
abc_d JLI Master Trainee
Alter: 34 Anmeldedatum: 27.01.2003 Beiträge: 615
Medaillen: Keine
|
Verfasst am: 04.01.2006, 22:28 Titel: |
|
|
Was für Winkelfunktionen verwendest du? |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 04.01.2006, 22:39 Titel: |
|
|
Florian:
Versuche mal, anstatt um 270° um -90° zu drehen. Kann sein, dass die Funktionen da keinen Sicherheitscheck machen, und tatsächlich nur von -180° - +180° gehen. |
|
Nach oben |
|
|
Florian Super JLI'ler
Alter: 36 Anmeldedatum: 20.06.2003 Beiträge: 302
Medaillen: Keine
|
Verfasst am: 04.01.2006, 22:51 Titel: |
|
|
Also ich hab den Fehler gefunden der Fehler ist bei der Berechnung des rotations Winkel. Hierzu eine Frage. Also ich hab da ein Richtungsvektor mit Hilfe diesen sollte das Sprite Objek rotiert werden.
zb
D3DXVECTOR2 vDirection(1,0) sollte 0 Grad bedeuten
(0,1) .. 90 Grad ..
(-1,0) .. 180 Grad ..
(0,-1) 270 Grad
den Winkel berechne ich nun mit
CPP: | float winkel = atan2f(vDirection.x,vDirection.y);
|
aber ich bekomme als Ergebniss immer folgendes
(1,0) 90 Grad
(0,1) 0 Grad
(-1,0) -90 Grad
(0,-1) 180 Grad
Wie kann man das Berechnen. Thx schon mal im Voraus _________________ Theorie ist, wenn man alles weiss und nichts funktioniert.
Praxis ist, wenn alles funktioniert und keiner weiss warum. |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 04.01.2006, 23:04 Titel: |
|
|
spontane idee:
arcsin(x) + arccos(y) |
|
Nach oben |
|
|
Florian Super JLI'ler
Alter: 36 Anmeldedatum: 20.06.2003 Beiträge: 302
Medaillen: Keine
|
Verfasst am: 04.01.2006, 23:17 Titel: |
|
|
Hallo DirectXer ich hab deine spontane Idee mal probiert hat aber nicht den Erfolg gebracht den ich mir dachte. Aber danke. Ich habs jez so gelöst
CPP: | float CalcAngle(float x,float y)
{
float fHypothenuse = pow((pow(x,2)+pow(y,2)),0.5);
float fcos = acos(x/fHypothenuse);
float fangle = 0;
if(y<0.0f)
{
fangle = 2*PI-fcos;
}
else
{
fangle = fcos;
}
return fangle;
} |
_________________ Theorie ist, wenn man alles weiss und nichts funktioniert.
Praxis ist, wenn alles funktioniert und keiner weiss warum. |
|
Nach oben |
|
|
DirectXer Dark JLI'ler
Anmeldedatum: 05.02.2005 Beiträge: 1201 Wohnort: Köln Medaillen: Keine
|
Verfasst am: 04.01.2006, 23:43 Titel: |
|
|
na dann is ja gut . Vllt könnte man auch noch was an der Funktion verschönern, aber das überlass ich jetzt ma den anderen *leise rausschleich*
Gruß DirectXer |
|
Nach oben |
|
|
|