opengl glut hello world



  • hallo, ich habe mir ein openGL buch gekauft,

    als erstes Beispiel wird ein Bild gerendert, auf dessen zufällig pixel gesetzt werden. leider ist das Beispiel für Windows, ich möchte unter linux arbeiten.

    kann mir jemand sagen, warum die Pixel nicht gesetzt werden und das bild einfach schwarz ist / bleibt?

    #include <stdio.h>
    #include <GL/glut.h>
    #include <math.h>
    #include <debug/debug.h>
    
    bool display(void)
    {
    
        glBegin(GL_POINTS);
    
        GLubyte c = rand() % 256;
        GLdouble sx = rand() % 640;
        GLdouble sy = rand() % 48;	
        glColor3ub(c, c, c);
        glVertex2d(sx, sy);
    
        glEnd();
    
       // Make sure changes appear onscreen
       glutSwapBuffers();
    
       if(glGetError())
         return false;
    
       return true;
    
    }
    
    int main(int argc, char **argv){
            glutInit(&argc,argv);
            glutInitDisplayMode(GLUT_DOUBLE| GLUT_RGB| GLUT_DEPTH);
            glutInitWindowSize(640,480);
            glEnable(GL_DEPTH_TEST); 
            glEnable(GL_TEXTURE_2D);
          //  glutInitWindowPosition(0,0);
            glutCreateWindow("test");
    
    	while(display())
    	;
    }
    

    die display funktion wird aufgerufen...



  • while(display())
        ;
    

    Das ist falsch.

    Es muss heissen:

    glutDisplayFunc(display)
    

    http://www.opengl.org/resources/libraries/glut/spec3/node46.html
    http://www.lighthouse3d.com/tutorials/glut-tutorial/?2

    Und btw, bei GLUT und OpenGL isses völlig egal, ob du mit Windows oder Linux arbeitest :). Der Code sollte portabel sein, solange du unter Linux OpenGL-fähige Treiber hast.



  • es liegt an

    GLubyte c = rand() % 255;
        GLdouble sx = rand() % 640;
        GLdouble sy = rand() % 48;	
        glColor3ub(c, c, c);
        glVertex2d(sx, sy);
    

    mit anderen beispielen läufts....
    was ist ein meinem skriptchen falsch?

    ich errechne zufallsfarben von 0 - 255, eine zufallsposition, gebe ihr die farbe und die koordinate, oder?

    // edit

    mir ist aufgefallen, dass bei einem resize teilweise der gewünschte effekt auftritt.


  • Mod

    Der Fehler ist, dass die Koordinaten erst einmal von -1 bis 1 gehen, nicht von 0 bis 640 bzw. 480. Wenn du dein Programm entsprechend änderst sollte es funktionieren:

    #include <GL/glut.h>
    
    void  display(void)
    {
      glBegin(GL_POINTS);
      GLubyte c = rand() % 256;
      GLdouble sx = rand() /(0.5*RAND_MAX) -1.0;
      GLdouble sy = rand() /(0.5*RAND_MAX) -1.0;   
      glColor3ub(c, c, c);
      glVertex2d(sx, sy);
      glEnd();
    
      glutSwapBuffers();
    }
    
    int main(int argc, char **argv){
      glutInit(&argc,argv);
      glutInitDisplayMode(GLUT_DOUBLE| GLUT_RGB);
      glutInitWindowSize(640,480);
      glutCreateWindow("test");
    
      glutDisplayFunc(display);
    
      // Aktivieren um Fenster nach und nach zu füllen:
      //  glutIdleFunc(display); 
    
      glutMainLoop();  
    }
    

    Versuch auch mal die Zeile 28 zu aktivieren. Ich vermute mal das ist der effekt den du wünscht.

    edit: Ich habe dir auch mal allerlei Kram rausgemacht den du hier gar nicht benutzt



  • Das was SeppJ sagt, stimmt natürlich, ausser du verwendest noch eine orthographische Ansicht, dann gehts auch mit deinen Werten.
    glOrtho(0,640,480,0, -1, 1)
    anstatt
    glPerspective



  • Scorcher24 schrieb:

    glPerspective

    gluPerspective oder glFrustum


Anmelden zum Antworten