1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Deutsch
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

[Open-GL] GluLookAt

  • Heinzel
  • 29. Juni 2007 um 18:44
  • Unerledigt
  • Heinzel
    1
    Heinzel
    Mitglied
    Punkte
    10
    Beiträge
    1
    • 29. Juni 2007 um 18:44
    • #1

    Hallo,

    riesen Problem! Wir schreiben am Mo eine Klausur in Grafischer-Datenverarbeitung und haben ein kleines Problem. Wir können uns die Funktionsweise von GluLookAt nicht so ganz erklären, genauer die des UP-Vektors. Hier werden immer irgendwelche Objekte gedreht, nur so richtig klar ist mir das nicht!

    Ich hätte hier mal ein paar SourceCodes:


    #include <stdlib.h>
    #include <stdio.h>
    #include <GL/glut.h>


    void display(void);
    void init (void);
    void reshape(int w, int h);

    int main (int argc, char **argv){
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGBA);
    glutCreateWindow("muh");
    init();
    glutDisplayFunc(display);
    glutReshapeFunc(reshape);
    glutMainLoop();
    return 0;
    }


    void display(void){
    glClear(GL_COLOR_BUFFER_BIT);
    glColor3f(1.0,0.0,0.0);
    glLoadIdentity();
    gluLookAt(0.0,0.0,5.0, 0.0,0.0,0.0, 0.0,1.0,0.0);

    //hier zeigt das Objekt nach rechts!

    glPushMatrix();
    glScalef(2.0, 1.0, 1.0);
    glutWireCube(1.0);
    glPopMatrix();
    glPushMatrix();
    glTranslatef(1.0, 0.0, 0.0);
    glRotatef(90.0, 0.0, 1.0, 0.0);
    glutWireCone(0.5, 1.0, 30.0, 30.0);
    glPopMatrix();
    glFlush();
    }

    void init(void){
    glShadeModel(GL_FLAT);
    glClearColor(1.0,1.0,1.0,1.0);
    }

    void reshape(int w, int h)
    {
    glViewport(0,0, (GLsizei)w, (GLsizei)h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    glOrtho(-2.0, 3.0, -2.0, 2.0, 0.0, 20.0);
    glMatrixMode(GL_MODELVIEW);

    }


    -> bei diesem Programm zeigt es allerdings nach oben (in der Ausganssituation): Warum nicht auch nach rechts?


    #include <stdlib.h>
    #include <GL/glut.h>


    void display(void);
    void init(void);
    void reshape(int w, int h);
    void keyboard(unsigned char key, int x, int y);

    int main (int argc, char **argv){
    glutInitWindowSize(400,400);
    glutInitWindowPosition(100,100);
    glutInit(&argc, argv);
    glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
    glutCreateWindow(argv[0]);
    init();
    glutReshapeFunc(reshape);
    glutDisplayFunc(display);
    glutKeyboardFunc(keyboard);
    glutMainLoop();
    return 0;
    }


    void display(void){
    glClear(GL_COLOR_BUFFER_BIT);
    glBegin(GL_POLYGON);
    glVertex3d(0.0,0.8,0.0);
    glVertex3d(0.4,0.6,0.0);
    glVertex3d(0.4,-0.8,0.0);
    glVertex3d(-0.4,-0.8,0.0);
    glVertex3d(-0.4,0.6,0.0);
    glEnd();
    glutSwapBuffers();

    }

    void init(void){
    glClearColor(1.0,1.0,1.0,1.0);
    glColor3f(1.0,0.0,0.0);
    }

    void reshape(int w, int h)
    {
    glViewport(0,0, (GLsizei)400, (GLsizei)400);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluOrtho2D(-1.0, 1.0, -1.0, 1.0);
    glMatrixMode(GL_MODELVIEW);
    gluLookAt(0.0,0.0,1.0, 0.0,0.0,0.0, 0.0,1.0,0.0);
    }

    void keyboard(unsigned char key, int x, int y)
    {
    switch(key)
    {
    case '1':
    glRotatef(-45.0,0.0,0.0,1.0);
    glPushMatrix();
    glutPostRedisplay();
    break;
    case '2':
    glScalef(1.0,-0.5,1.0);
    glutPostRedisplay();
    break;
    case '3':
    glLoadIdentity();
    glRotatef(45.0,0.0,0.0,1.0);
    glutPostRedisplay();
    break;
    case '4':
    exit(0);
    default:
    break;
    }
    }

    Unser Prof. konnte uns das nicht wirklich näher bringen und hoffe nun, daß das hier jemand machen kann. Sowas kommt nämlich immer dran und dann wäre es schlecht, wenn ichs net kann :face_with_tongue:

    Über Hilfe würde ich mich freuen...

    MfG

  • Wolfibolfi
    37
    Wolfibolfi
    Mitglied
    Reaktionen
    186
    Punkte
    14.936
    Beiträge
    2.942
    • 29. Juni 2007 um 19:14
    • #2

    Der Up-Vektor gibt die Richtung an, die in der Bildebene oben ist. Wenn der Vektor nach rechts zeigt, dann ists so, wie wenn du deinen Kopf nach rechts neigen würdest.

    In einen FBO rendern ist wie eine Schachtel Pralinen - man weiß nie, was man kriegt.

  • hal
    32
    hal
    Mitglied
    Reaktionen
    52
    Punkte
    11.122
    Beiträge
    2.208
    • 30. Juni 2007 um 11:31
    • #3

    In 3D-Modellierungsprogrammen wird der Up-Vector oft als dicker fetter Pfeil dargestellt, wie hier zB in blender:

    [font=verdana,sans-serif]"An über-programmer is likely to be someone who stares quietly into space and then says 'Hmm. I think I've seen something like this before.'" -- John D. Cock[/font]

    opentu.net - freier, unzensierter Informationsaustausch via IRC-Channel!
    Hilfe und Support in Studienangelegenheiten, gemütliches Beisammensein, von und mit Leuten aus dem Informatik-Forum!

  • Maximilian Rupp 27. Dezember 2024 um 12:05

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung

  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  • Deutsch
  • English
Zitat speichern