?
warum seh ich hier nur einen schwarzen bildschirm? den sample code hab ich von hier: http://www.gamedev.de/index.php?name=News&file=article&sid=12 müsste eigentlich laufen? cu
void GLWidget::paintGL()
{
glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // framebuffer & z-buffer werden gelöscht
glLoadIdentity(); // identity-matrix laden d.h. 'ursprungskoordinaten laden'
// Im ersten Tutorial haben wir bereits gesehen das es sowas wie ein Dreieck gibt
// der Code sah folgendermaßen aus
// glColor3f (1, 1, 1);
// glBegin (GL_TRIANGLES);
// glVertex3f (-1, -1, -10);
// glVertex3f ( 1, -1, -10);
// glVertex3f ( 1, 1, -10);
// glEnd();
// dabei fällt auf das immer zu Begin eines Zeichevorganges eine funktion namens glBegin();
// aufgerufen wird. Gefolgt von Koordinaten, die mittels glVertex3f(); übergeben werden,
// wird der Zeichenvorgang mit einem glEnd(); wieder beendet.
// Dieses Spiel mit glBegin() und glEnd() kann beliebig oft und an (natürlich von der Logik abhängig)
// beliebiger stelle fortgesetzt werden, es wird, in unserem Fall, erst dann wieder was davon auf
// dem Bildschirm zu sehen sein wenn wir SwapBuffers(); ausführen
// außer Dreiecken gibt es noch Punkte, Linien und alles das was man aus diesen drei Elementen
// zusammen bauen kann. Z.B. ein Viereck besteht aus zwei Dreiecken, auch wenn es explizit möglich ist unter
// openGL Vierecke zu zeichnen. Kommen wir nun zum Code.
// Zeichnet zwei Dreiecke
glColor3f (1, 1, 1);
glBegin(GL_TRIANGLES);
glVertex3f(-5,3.5f,-10);
glVertex3f(-5,2.5f,-10);
glVertex3f(-4,2.5f,-10);
glColor3f (1, 1, 0); // die Farbe, und später andere Atribute, kann an beliebiger Stelle und belibig oft
// geändert werden. Man kann sich vorstellen das openGL sich immer die letzte Farbe so
// lange merkt und anwendet bis man eine neue einstellt. Es gibt noch eine ganze Reihe
// anderer Attribute (z.B. Textur Koordinaten) die aber erst in einem Späteren Tutorial
// durchgenommen werden
glVertex3f(-3.5f,3.5f,-10);
glVertex3f(-3.5f,2.5f,-10);
glColor3f (1, 0, 1);
glVertex3f(-2.5f,2.5f,-10);
glEnd();
// An dieser Stelle ist zu bemerken das die Primitiven (im Normal Fall) nur einseitig gezeichnet werden.
// Es also eine Vor- und Rückseite gibt. Dies wird durch eine Normale bestimmt die abhängig von der Reihenfolge der
// reinkommenden Vertex Punke ausgerichtet wird und, ausgehend von einer Fläche, eben in die eine oder andere
// Richtung zeigt. Was dazu fürt das folgendes Dreieck eben nicht zu sehen sein wird.
glBegin(GL_TRIANGLES);
glVertex3f(-5,1,-10);
glVertex3f(-5,2,-10);
glVertex3f(-4,2,-10); // wenn man hier die Reihenfolge einfach umkehren würde könnte man es wieder sehen
glEnd();
// Da es aber vorkommen kann das man ein z.B. Dreieck von beiden Seiten sehen will ist das alles natürlich Einstellungs Sache
// siehe dazu glCullFace();
// Zeichnet ein Viereck
glBegin(GL_QUADS);
glColor3f(1,0,0);
glVertex3f(-1,3.5f,-10);
glColor3f(0,1,0);
glVertex3f(-1,2.5f,-10);
glColor3f(0,0,1);
glVertex3f(0,2.5f,-10);
glColor3f(1,1,1);
glVertex3f(0,3.5f,-10);
glEnd();
// Zeichnet eine Art Fecher z.B. für Kreise (war mir per Hand aber zu viel Arbeit ;-))
glBegin(GL_TRIANGLE_FAN);
glColor3f(1,1,1);
glVertex3f(3,2.5f,-10);
glColor3f(1,0,0);
glVertex3f(2,1.5f,-10);
glColor3f(0,1,0);
glVertex3f(4,1.5f,-10);
glColor3f(0,0,1);
glVertex3f(4,3.5f,-10);
glColor3f(1,1,0);
glVertex3f(2,3.5f,-10);
glEnd();
// Zeichnet eine Reihe von Dreiecken (seiht ein wenig wie ein Schal auß, das Ding für den Hals im Winter lol)
glBegin(GL_TRIANGLE_STRIP);
glColor3f(1,0,0);
glVertex3f(0,0,-10);
glColor3f(0,1,0);
glVertex3f(0,-1,-10);
for(int x=1;x<6;x++)
{
glColor3f(1,0,0);
glVertex3f(x,0,-10);
glColor3f(0,1,0);
glVertex3f(x,-1,-10);
}
glEnd();
// Zeichnet nicht miteinander verbundene Linien
glLineWidth(2); //is klar denke ich
glBegin(GL_LINES);
glVertex3f(-3,1,-10);
glVertex3f(-2,-1,-10);
glVertex3f(-4.5f,0,-10);
glVertex3f(-3,-2,-10);
glVertex3f(-1,1,-10);
glVertex3f(-3,-1,-10);
glEnd();
// Zeichnet Punkte
glColor3f(1,0,0);
glPointSize(4); //is klar
glBegin(GL_POINTS);
glVertex3f(-1,-2,-10);
glVertex3f(-0.5f,-2.4,-10);
glVertex3f(-1.5,-1.9,-10);
glVertex3f(-1,-2.5,-10);
glVertex3f(-1.2,-3,-10);
glVertex3f(0,-3.25,-10);
glVertex3f(1,-2.45,-10);
glVertex3f(0.8f,-2.1,-10);
glEnd();
}