OpenGL - Koordinatensystem des Betrachters verschieben



  • Hallo!

    Ich habe mehrere Objekte im 3D Raum sagen wir mal an Pos x=300, y=300, z=300 bis x=310,y=310,z=310.
    Nehmen wir mal der Einfachkeit halber an, es sind Dreiecke.
    Beim Drehen (glRotate) werden diese ja um den Ursprung des Betrachters gedreht.

    Kann ich irgendwie einstellen, dass diese um den Punkt 300, 300, 300 gedreht werden sollen?

    Hier ein paar Codeauszüge mit einem Dreieick um es zu verstehen.

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); 
      // Die vorherige Szene wird vom Bildschirm gelöscht, 
      // damit die neuen nicht einfach über die alten    
      // Objekte gezeichnet werden
    
      glLoadIdentity(); 
      // modelview-Matrix wird zurückgesetzt  
    
      GLfloat xx = 300.0;
      GLfloat yy = 300.0;
      GLfloat zz = 300.0;
    
    /*
      // Kamera "versetzen" durch Drehung
      // DIES HABE ICH VERSUCHT HAT ABER NICHT FUNKTIONIERT!
      GLfloat alp = atan(xx / zz);
      alp = - rad2deg(alp);
      GLfloat bet = atan(yy / xx);
      bet = - rad2deg(bet)
      glRotatef(alp, 0.0f, 1.0f, 0.0f); // Kamera in Richtung Objekt blicken lassen - Drehung um y Achse
      glRotatef(bet, 0.0f, 0.0f, 1.0f); // Kamera in Richtung Objekt blicken lassen - Drehung um z Achse
    */
      glTranslatef(xx,yy,zz);
    
      // Drehung (rdreieck wird beim Zeichnen später immer weiter erhöht)
      glRotatef(rdreieck,0.0f,1.0f,0.0f); // Das Dreieck soll um die Y-Achse rotiert werden
    
      // Normales Dreieck
      glBegin(GL_TRIANGLES); // Ein Dreieck soll gezeichnet werden
        glColor3f(0.0f,0.0f, 1.0f); // es soll soll blau werden
        glVertex3f( 0.0f, 1.0f, 0.0f); // Die obere Ecke des Dreiecks
        glVertex3f(-1.0f, -1.0f, 0.0f); // unten links
        glVertex3f( 1.0f, -1.0f, 0.0f); // unten rechts
      glEnd(); // Zeichenaktion beenden
    
      // ...
    
      rdreieck -= 1.0f;
    

    Wenn das Objekt wirklich so gezeichnet wird, ist es ja auch nicht sichtbar, da der sichtbare Bereich ja irgendwie zu klein ist, oder?

    Gruß
    jf_stgt

    Compiler: Visual Studio 2008 Express


Anmelden zum Antworten