JLI Spieleprogrammierung Foren-Übersicht JLI Spieleprogrammierung

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

Kamera bewegen auf Y-Achse

 
Neues Thema eröffnen   Neue Antwort erstellen    JLI Spieleprogrammierung Foren-Übersicht -> DirectX, OpenGL
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
Kaiserludi
Mini JLI'ler



Anmeldedatum: 22.07.2004
Beiträge: 27

Medaillen: Keine

BeitragVerfasst am: 27.07.2004, 15:51    Titel: Kamera bewegen auf Y-Achse Antworten mit Zitat

Momentan sieht meine Kamerafunktion so aus:

Code:

void MAIN::Kamera(void)
{
   Input.Tastatur_Update();

   if(TASTE(DIK_LCONTROL) || TASTE(DIK_RCONTROL))
   {
      if(TASTE(DIK_LEFT))
         rotation_y+=0.01f;
      if(TASTE(DIK_RIGHT))
         rotation_y-=0.01f;
      if(TASTE(DIK_UP))
         rotation_x+=0.01f;
      if(TASTE(DIK_DOWN))
         rotation_x-=0.01f;
   }
   else
   {
      if(TASTE(DIK_LEFT))
      {
         Position.x -= 0.1f * sinf(D3DX_PI/2 + rotation_y);
         Position.z -= 0.1f * cosf(D3DX_PI/2 + rotation_y);
      }
      if(TASTE(DIK_RIGHT))
      {
         Position.x += 0.1f * sinf(D3DX_PI/2 + rotation_y);
         Position.z += 0.1f * cosf(D3DX_PI/2 + rotation_y);
      }
      if(TASTE(DIK_UP))
      {
         Position.x += 0.1f * sinf(rotation_y);
         Position.z += 0.1f * cosf(rotation_y);
      }
      if(TASTE(DIK_DOWN))
      {
         Position.x -= 0.1f * sinf(rotation_y);
         Position.z -= 0.1f * cosf(rotation_y);
      }
   }

   if(TASTE(DIK_LCONTROL) || TASTE(DIK_RCONTROL) || (!TASTE(DIK_LEFT) && !TASTE(DIK_RIGHT) && !TASTE(DIK_UP) && !TASTE(DIK_DOWN)))
      D3DXMatrixIdentity(&Translationsmatrix);

   D3DXMatrixMultiply(&Viewmatrix, &Viewmatrix, & Translationsmatrix);

   // Berechnung der Blickrichtung in der x-z-Ebene
   Blickrichtung.x = sinf(rotation_y) + Position.x;
   Blickrichtung.z = cosf(rotation_y) + Position.z;
   // Berechnung der Blickhöhe
   Blickrichtung.y = sinf(rotation_x) + Position.y;

   D3DXMatrixLookAtLH(&Viewmatrix, &Position, &Blickrichtung, &Hoehe);
   Direct3D.lpD3DDevice->SetTransform(D3DTS_VIEW, &Viewmatrix);
}


Jetzt hätte ich es gerne so, dass , wenn ich mich um 90° auf der X-Achse nach vorne Drehe, ich also senkrecht zum Erdboden gucke, ich/die Kamera beim drücken von DIK_DOWN nach oben fliege, also die Y-Position auch vom aktuellen Drehwinkel abhängt! Es soll allerdings keine Rotation um die Z-Achse dazu nötig sein, denn man kann sich ja mit den bisherigen beiden Rotationsachsen schon in jede Richtung drehen und die Steuerung soll ja einfach bleiben!
Ich stehe momentan vor dem Problem, wie ich die neue Y-Position berechnen soll, kann mir da mal wer auf die Sprünge helfen bitte?
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Jonathan_Klein
Living Legend


Alter: 37
Anmeldedatum: 17.02.2003
Beiträge: 3433
Wohnort: Siegerland
Medaillen: Keine

BeitragVerfasst am: 27.07.2004, 16:03    Titel: Antworten mit Zitat

Die Kamerabewegnung ist sehr einfach, wen du die LookAt Vektor hast. Du must dann einfach nur noch die kamera entsprechend dieses Vektors bewegen. Am besten Normalisierst du den Richtungsvektor (Blickpunkt-Kameraposition) und bewegst die Kamera dann in diese Richtung weiter. So kannst du die Kamera immer in die Blickrichtung bewegen.
_________________
https://jonathank.de/games/
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden Website dieses Benutzers besuchen
Kaiserludi
Mini JLI'ler



Anmeldedatum: 22.07.2004
Beiträge: 27

Medaillen: Keine

BeitragVerfasst am: 27.07.2004, 16:38    Titel: Antworten mit Zitat

Zitat:

Am besten Normalisierst du den Richtungsvektor (Blickpunkt-Kameraposition)

Und was heißt das jetzt? Sorry, ich bekomme Vektorrechnung in der Schule erst nächstes Jahr!
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
sp3cK-r0LL3
Senior JLI'ler


Alter: 34
Anmeldedatum: 18.06.2004
Beiträge: 275

Medaillen: Keine

BeitragVerfasst am: 27.07.2004, 17:07    Titel: Antworten mit Zitat

haste das buch gelesen?
_________________
sex is updatedb; locate; talk; date; cd; strip; look; touch; finger; unzip; uptime; gawk; head; apt-get install condom; mount; fsck; gasp; more; yes; more; umount; apt-get remove --purge condom; make clean; sleep
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Kaiserludi
Mini JLI'ler



Anmeldedatum: 22.07.2004
Beiträge: 27

Medaillen: Keine

BeitragVerfasst am: 27.07.2004, 17:10    Titel: Antworten mit Zitat

Ja.
Nach oben
Benutzer-Profile anzeigen Private Nachricht senden
Hazel
JLI MVP
JLI MVP


Alter: 39
Anmeldedatum: 19.07.2002
Beiträge: 1761

Medaillen: Keine

BeitragVerfasst am: 27.07.2004, 17:19    Titel: Antworten mit Zitat

Du dividierst den Vektor durch seine Länge, dadurch bekommt der Vektor die Länge 1.
_________________
*click* Dabuu!?
Twitter: http://twitter.com/Ollie_R
Nach oben
Benutzer-Profile anzeigen Private Nachricht 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