JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Sprite um 270 Grad rotieren

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
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: 04.01.2006, 22:13    Titel: Sprite um 270 Grad rotieren Antworten mit Zitat

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 Wink
_________________
Theorie ist, wenn man alles weiss und nichts funktioniert.
Praxis ist, wenn alles funktioniert und keiner weiss warum.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
Christian Rousselle
Site Admin


Alter: 48
Anmeldedatum: 19.07.2002
Beiträge: 1630

Medaillen: Keine

BeitragVerfasst am: 04.01.2006, 22:22    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Patrick
Dark JLI Master



Anmeldedatum: 25.10.2004
Beiträge: 1895
Wohnort: Düren
Medaillen: Keine

BeitragVerfasst am: 04.01.2006, 22:24    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden Website dieses Benutzers besuchen
Florian
Super JLI'ler


Alter: 36
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 04.01.2006, 22:28    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
abc_d
JLI Master Trainee


Alter: 34
Anmeldedatum: 27.01.2003
Beiträge: 615

Medaillen: Keine

BeitragVerfasst am: 04.01.2006, 22:28    Titel: Antworten mit Zitat

Was für Winkelfunktionen verwendest du?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
DirectXer
Dark JLI'ler



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

BeitragVerfasst am: 04.01.2006, 22:39    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Florian
Super JLI'ler


Alter: 36
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 04.01.2006, 22:51    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
DirectXer
Dark JLI'ler



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

BeitragVerfasst am: 04.01.2006, 23:04    Titel: Antworten mit Zitat

spontane idee:

arcsin(x) + arccos(y)
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
Florian
Super JLI'ler


Alter: 36
Anmeldedatum: 20.06.2003
Beiträge: 302

Medaillen: Keine

BeitragVerfasst am: 04.01.2006, 23:17    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden MSN Messenger
DirectXer
Dark JLI'ler



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

BeitragVerfasst am: 04.01.2006, 23:43    Titel: Antworten mit Zitat

na dann is ja gut Smile . Vllt könnte man auch noch was an der Funktion verschönern, aber das überlass ich jetzt ma den anderen *leise rausschleich* Wink

Gruß DirectXer
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