Files |  Tutorials |  Articles |  Links |  Home |  Team |  Forum |  Wiki |  Impressum

Aktuelle Zeit: Mi Jul 16, 2025 20:36

Foren-Übersicht » Programmierung » Einsteiger-Fragen
Unbeantwortete Themen | Aktive Themen



Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Perspektivenfehler?
BeitragVerfasst: So Feb 12, 2006 18:24 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 02, 2006 22:37
Beiträge: 39
Wohnort: Köln
Moin moin,
Ich hab ein kleines Problem mit glRotate(). Aus irgendeinem Grund rotiert es nicht richtig, oder die Perspektive ist falsch. Ich habe ein Quad auf den "Boden" der Szene gezeichnet (Also ein Quad was sich auf X und Z ausbreitet und Y immer 0 bleibt). Dann hab ich mittels glRotate das ganze um 45 Grad gedreht. Nun sollte ich ja eigendlich einen Zipfel des Quads in der Mitte meiner Szene haben. Doch leider ist das nicht so. Hier gibts nen Screenshot.

Ich bin mir ziemlich sicher keinen Fehler bei der Matrixtransformation zu haben, aber dennoch gibts hier ein bisschen Code. :)

Code:
  1.  
  2.     while( gameLoopActive ){
  3.         currentSDLTicks = SDL_GetTicks();
  4.        
  5.         /***********************************
  6.          * BENUTZERINTERAKTIONSPART (SDL)
  7.          ***********************************/
  8.         while( SDL_PollEvent( &sdlEvent ) == 1 ){
  9.             if( sdlEvent.type == SDL_QUIT ) stopGameLoop();
  10.         }
  11.        
  12.         /***********************************
  13.          * RENDERPART (OpenGL)
  14.          ***********************************/
  15.         glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
  16.         glLoadIdentity();
  17.        
  18.         mainCamera->setPosition( 5.0f, 1.0f, 5.0f );
  19.         mainCamera->lookAt( 0.01f, 0.01f, 0.01f );
  20.         mainCamera->useCamera();
  21.         std::cout << "Grad: " << mainCamera->getRotate() << std::endl;
  22.        
  23.         if( currentMap != NULL ) currentMap->render( *textureManager, *modelManager );
  24.        
  25.         SDL_GL_SwapBuffers();
  26.                
  27.         //Updaten der FPS
  28.         if( currentSDLTicks - lastFPSUpdate >= 1000 ){
  29.             framecounter++;
  30.             currentFPS      = framecounter;
  31.             framecounter    = 0;
  32.             lastFPSUpdate   = currentSDLTicks;
  33.         } else framecounter++;
  34.        
  35.         //Eine Verzögerung einbauen um die FPS zu veringern
  36.         SDL_Delay( 1000 );
  37.     }
  38.  


Und hier der relevante Teil meiner Kamera. (Noch lange nicht final)

Code:
  1.  
  2. void Camera::useCamera(){
  3.     glLoadIdentity();
  4.     glTranslatef( -x, -y, -z );
  5.     glRotatef( rotate, 0.0f, 1.0f, 0.0f );
  6.     glRotatef( roll, 0.0f, 0.0f, 1.0f );
  7.     glRotatef( pitch, 1.0f, 0.0f, 0.0f );
  8. }
  9.  
  10. void Camera::lookAt( float x, float y, float z ){
  11.     //Rotation löschen
  12.     rotate  = 0.0f;
  13.     roll    = 0.0f;
  14.     pitch   = 0.0f;
  15.     //Neue Rotation berechnen
  16.     //Vector zum Punkt erstellen und normalisieren
  17.     Vector lookVector( x - this->x, 0, z -this->z );
  18.     lookVector.normalize();
  19.     //Vector der Aktuellen sicht erstellen
  20.     Vector currentLookVector( 0.0f, 0.0f, -1.0f );
  21.     currentLookVector.normalize();
  22.  
  23.     //Punktprodukt
  24.     float angle = acos( lookVector.getX() * currentLookVector.getX() + lookVector.getY() * currentLookVector.getY() + lookVector.getZ() * currentLookVector.getZ() );
  25.     rotate = angle * ( 180 / PI );
  26. }
  27.  


-Malax
PS: Nein, ich bin nicht im Ortho Modus. :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Feb 12, 2006 18:59 
Offline
Guitar Hero
Benutzeravatar

Registriert: Do Sep 25, 2003 15:56
Beiträge: 7810
Wohnort: Sachsen - ERZ / C
Programmiersprache: Java (, Pascal)
Ist es für dich sehr von Bedeutung gluLookAt neu zu implementieren? Ansonsten kannst du die Funktion ja benutzen.

_________________
Blog: kevin-fleischer.de und fbaingermany.com


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Feb 12, 2006 19:02 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 02, 2006 22:37
Beiträge: 39
Wohnort: Köln
Das es gluLookAt gibt weiss ich schon. Nun, ja ich möchte es schon gern selber machen. Irgend eine innere Stimme sagt mir das ich eines Tages brauchen werde. (Bisher hats schon einiges gebracht, zB ich hab das Punktprodukt kennengelernt) ;)

-Malax


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Feb 12, 2006 19:08 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
Wenn ich mich nicht täusche gehen beim Anwenden der Funktion acos Winkelinformationen verloren (cos(-90) = cos(90)). Du müsstest dir also auch noch merken ob du nach „links“ oder nach „rechts“ rotieren musst. Trotzdem ist deine Methode ziemlich umständlich. Du kommst besser, wenn du auf die Funktionen glRotate und glTranslate verzichtest und die Modelviewmatrix direkt modifizierst. Sonst führst du die Operationen nur doppelt aus.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Feb 12, 2006 20:18 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 02, 2006 22:37
Beiträge: 39
Wohnort: Köln
Ich hab nun mal Translate und Rotate rausgenommen und direkt eine Matrix erstellt. Das Problem besteht allerdings immer noch. :-(

-Malax


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So Feb 12, 2006 21:17 
Offline
DGL Member
Benutzeravatar

Registriert: Di Nov 26, 2002 22:12
Beiträge: 259
Wohnort: Dresden
In dem zugehörigen Artikel von gluLookAt wird beschrieben, wie du die Modelviewmatrix so berechnen kannst, dass du den selben Effekt von gluLookAt erreichst. Vielleicht ist dir ein Fehler bei der Umsetzung unterlaufen. Um Sicherheit zu haben solltest du deinen Code einfach mal auf gluLookAt umstellen (das dürfte ja nicht wieter schwierig sein). Wenn das Problem dann immernoch auftritt weißt du zumindest, dass der Fehler nicht in deiner Kameraimplementation liegt.

_________________
Nichts auf der Welt ist so gerecht verteilt wie der Verstand. Denn jederman ist überzeugt, dass er genug davon habe.
Rene Descartes, frz. Mathematiker u. Philosoph, 1596-1650


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo Feb 13, 2006 00:11 
Offline
DGL Member
Benutzeravatar

Registriert: Mo Jan 02, 2006 22:37
Beiträge: 39
Wohnort: Köln
Warum bin ich noch nicht selber draufgekommen einfach mal mit gluLookAt zu prüfen, ob es an meiner Kamera liegt... Nun, ich habs mal implementiert und musste leider festellen, dass es einwandfrei funktioniert. Also muss ich einen Fehler in meiner Implementation haben. Ich werd mich morgen nochmal dran geben, bin müde ;)

-Malax


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 7 Beiträge ] 
Foren-Übersicht » Programmierung » Einsteiger-Fragen


Wer ist online?

Mitglieder in diesem Forum: Google [Bot] und 3 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
cron
  Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de
[ Time : 0.008s | 16 Queries | GZIP : On ]