Problem mit OpenGL und SDL



  • Hi,

    ich habe folgendes Problem und zwar kann ich die Z-Achse nicht verändern ich verstehe es nicht wieso das so ist.
    Hier mal der Code

    #include <SDL/SDL.h>
    #include <gl/gl.h>
    
    int main(int argc, char *argv[])
    {
      SDL_Event event;
      Uint8 *key;
      int done=0;
      float cameraX=0.0f,cameraY=0.0f,cameraZ=0.0f;
    
      //Initialisierungen
      SDL_SetVideoMode(1024, 800, 32, SDL_OPENGL | SDL_HWSURFACE | SDL_NOFRAME);
    
      glViewport(0, 0, 1024, 800);
      glClearColor(0.0f, 0.0f, 0.0f, 0.0f);
      glClearDepth(1.0);
      glDepthFunc(GL_LESS);
      glEnable(GL_DEPTH_TEST);
      glShadeModel(GL_SMOOTH);
      glMatrixMode(GL_PROJECTION);
      glMatrixMode(GL_MODELVIEW);
    
      //Wiederholen bis ESC gedrückt wird
      for(done = 0; !done;)
      {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
        glLoadIdentity();
        glTranslatef(cameraX,cameraY,cameraZ);
    
        glBegin(GL_TRIANGLES);
        glColor3f(1.0f, 0.0f, 0.0f);
        glVertex3f(0.0f, 1.0f,0.0f);
        glColor3f(0.0f, 1.0f, 0.0f);
        glVertex3f(-1.0f, -1.0f,0.0f);
        glColor3f(0.0f, 0.0f, 1.0f);
        glVertex3f(1.0f, -1.0f,0.0f);
        glEnd();
    
        SDL_GL_SwapBuffers();
    
        //Tastaturabfrage
        SDL_PollEvent(&event);
        key = SDL_GetKeyState(NULL);    //aktuellen zustand des keyboards in keys kopieren
    
          if(key[SDLK_ESCAPE])
          {
                               done=1;
          }
          if(key[SDLK_UP])
          {
                          cameraY+=0.01f;
          }
          if(key[SDLK_DOWN])
          {
                            cameraY-=0.01f;
          }
          if(key[SDLK_LEFT])
          {
                            cameraX-=0.01f;
          }
          if(key[SDLK_RIGHT])
          {
                             cameraX+=0.01f;
          }
      }
      SDL_Quit();
      return(0);
    }
    

    Wenn ich jetzt z.B bei CameraZ den wert -3.0f eingebe dann ist das Dreieck einfach verschwunden wenn ich -1.0f eingebe bleibt es in der gleichen Göße, also die KameraPos. verändert sich nicht. Wenn ich beim 3Eck die Z_pos. verändern will ist es genau das selbe.
    ich hoffe ihr könnt mir helfen.
    mfg Fabi



  • Setz mal die GL_PROJECTION-Matrix richtig. 🙂



  • Meinst du mit:

    gluPerspective(45.0f,(GLfloat)width/(GLfloat)height,0.1f,100.0f);

    ?

    Weil da kommt dann ne Fehlermeldung das er die Funktion nicht kennt



  • Achso habe die glu nicht eingebunden aber jetzt kommt noch n fehler
    jetzt der aktuelle code:

    #include <SDL/SDL.h>
    #include <SDL/SDL_opengl.h>
    
    int main(int argc, char *argv[])
    {
      SDL_Event event;
      Uint8 *key;
      int done=0;
      int width=1024,height=800;
      float cameraX=0.0f,cameraY=0.0f,cameraZ=-1.0f;
    
      SDL_SetVideoMode(1024, 800, 32, SDL_OPENGL | SDL_HWSURFACE | SDL_NOFRAME);
    
            glViewport(0,0,width, height);        
            glEnable(GL_TEXTURE_2D); //enable texture mapping
            glClearColor(0.0f, 0.0f, 0.0f, 0.0f); //Black Background
            glClearDepth(1.0); //enables clearing of deapth buffer
            glDepthFunc(GL_LEQUAL); //type of depth test
            glEnable(GL_DEPTH_TEST); //enables depth testing
            glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);      // Enable Alpha Blending (disable alpha testing)
            glEnable(GL_BLEND);                                     // Enable Blending       (disable alpha testing)
            glShadeModel(GL_SMOOTH); //enables smooth color shading
    
            glMatrixMode(GL_PROJECTION);
            glLoadIdentity(); //Reset projection matrix
    
            gluPerspective(45.0f, (GLfloat)width/(GLfloat)height, 1.0f, 100.0f); //calculate aspect ratio of the window
            glMatrixMode(GL_MODELVIEW);
    
      for(done = 0; !done;)
      {
        glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    
        glLoadIdentity();
        glTranslatef(cameraX,cameraY,cameraZ);
    
        glBegin(GL_TRIANGLES);
        glColor3f(1.0f, 0.0f, 0.0f);
        glVertex3f(0.0f, 1.0f,0.0f);
        glColor3f(0.0f, 1.0f, 0.0f);
        glVertex3f(-1.0f, -1.0f,0.0f);
        glColor3f(0.0f, 0.0f, 1.0f);
        glVertex3f(1.0f, -1.0f,0.0f);
        glEnd();
    
        SDL_GL_SwapBuffers();
        SDL_PollEvent(&event);
        key = SDL_GetKeyState(NULL);    //aktuellen zustand des keyboards in keys kopieren
    
          if(key[SDLK_ESCAPE])
          {
                               done=1;
          }
          if(key[SDLK_UP])
          {
                          cameraY+=0.01f;
          }
          if(key[SDLK_DOWN])
          {
                            cameraY-=0.01f;
          }
          if(key[SDLK_LEFT])
          {
                            cameraX-=0.01f;
          }
          if(key[SDLK_RIGHT])
          {
                             cameraX+=0.01f;
          }
    
      }
      SDL_Quit();
      return(0);
    }
    

    es kommt der Fehler:
    [Linker error] undefined reference to `gluPerspective@32'



  • Nicht vergessen, gegen glu32.lib zu linken.



  • Danke für eure Hilfe habe es jetzt hin bekommen
    habe es jetzt mit der glFrustum() Funktion gemacht

    mfg


Anmelden zum Antworten