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/?2Und 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.
-
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