RoCMe
21-08-2005, 23:23
Hey,
Ich versuche mich zurzeit in GLUT und OpenGL unter Linux.
Ich bin inzwischen imstande, Dreiecke und andere mehr oder wenige spannende geometrische Figuren in verschiedenen Farben zu zeichnen *g* Damit aber nicht genug - es soll mehr Bewegung ins Spiel. Aber aus irgendeinem Grund dreht sich das Dreieck nicht - und ich versteh nicht warum. Ich werde jetzt meinen kompletten Code posten, weil ich überhaupt nicht weiß, wo ich den Fehler suchen muss,,,
#include <stdlib.h>
#include <GL/glut.h>
bool fullscreen = false;
float angle = 0.0;
bool init()
{
glClearColor(0.93f, 0.93f, 0.93f, 0.0f);
return true;
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT); //alles "Überpinseln"
glColor3f(0.0f, 0.0f, 0.0f); //Farbe schwarz
angle = angle + 1; //Drehwinkel erhöhen
glRotatef(angle, 0.0f, 0.0f, 1.0f); //Rotieren
glBegin(GL_TRIANGLES); //Dreieck zeichnen
glVertex3f(-0.5f, -0.5f, 0.0f);
glVertex3f( 0.5f, -0.5f, 0.0f);
glVertex3f( 0.0f, 0.5f, 0.0f);
glEnd();
glFlush();
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
if (key == 27)
exit(1);
}
void specialKeyboard(int key, int x, int y)
{
if (key == GLUT_KEY_F1)
{
fullscreen = !fullscreen;
if (fullscreen)
glutFullScreen();
else
{
glutReshapeWindow(500, 500);
glutPositionWindow(50, 50);
}
}
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitWindowPosition(50, 50);
glutInitWindowSize(500, 500);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutCreateWindow("05 - Primitives");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutSpecialFunc(specialKeyboard);
if (!init())
return 1;.
glutMainLoop();
return 0;
}
Das Dreieck wird einmal gezeichnet und bleibt dann immer so stehen - ich dahte aber eigentlich das nach dem Aufruf von glutMainLoop die display-Funktion immer wieder aufgerufen wird und damit auch anlge erhöht wird und sich das Dreieck somit dreht...
Brauche Hilfe ;-)
mfg
RoCMe
Das Dreieck wird normal angezeigt, aber dreht sich nicht. Nach meiner Vorstellung sollte aber gerade das pasieren - der Aufruf von glutMainLoop() bewirkt doch, das die vorher deklarierten Funktionen immer wieder durchlaufen werden - sprich das angle immer wieder erhöht wird und das Dreieck dann um den Winkel angl
Ich versuche mich zurzeit in GLUT und OpenGL unter Linux.
Ich bin inzwischen imstande, Dreiecke und andere mehr oder wenige spannende geometrische Figuren in verschiedenen Farben zu zeichnen *g* Damit aber nicht genug - es soll mehr Bewegung ins Spiel. Aber aus irgendeinem Grund dreht sich das Dreieck nicht - und ich versteh nicht warum. Ich werde jetzt meinen kompletten Code posten, weil ich überhaupt nicht weiß, wo ich den Fehler suchen muss,,,
#include <stdlib.h>
#include <GL/glut.h>
bool fullscreen = false;
float angle = 0.0;
bool init()
{
glClearColor(0.93f, 0.93f, 0.93f, 0.0f);
return true;
}
void display()
{
glClear(GL_COLOR_BUFFER_BIT); //alles "Überpinseln"
glColor3f(0.0f, 0.0f, 0.0f); //Farbe schwarz
angle = angle + 1; //Drehwinkel erhöhen
glRotatef(angle, 0.0f, 0.0f, 1.0f); //Rotieren
glBegin(GL_TRIANGLES); //Dreieck zeichnen
glVertex3f(-0.5f, -0.5f, 0.0f);
glVertex3f( 0.5f, -0.5f, 0.0f);
glVertex3f( 0.0f, 0.5f, 0.0f);
glEnd();
glFlush();
glutSwapBuffers();
}
void keyboard(unsigned char key, int x, int y)
{
if (key == 27)
exit(1);
}
void specialKeyboard(int key, int x, int y)
{
if (key == GLUT_KEY_F1)
{
fullscreen = !fullscreen;
if (fullscreen)
glutFullScreen();
else
{
glutReshapeWindow(500, 500);
glutPositionWindow(50, 50);
}
}
}
int main(int argc, char *argv[])
{
glutInit(&argc, argv);
glutInitWindowPosition(50, 50);
glutInitWindowSize(500, 500);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutCreateWindow("05 - Primitives");
glutDisplayFunc(display);
glutKeyboardFunc(keyboard);
glutSpecialFunc(specialKeyboard);
if (!init())
return 1;.
glutMainLoop();
return 0;
}
Das Dreieck wird einmal gezeichnet und bleibt dann immer so stehen - ich dahte aber eigentlich das nach dem Aufruf von glutMainLoop die display-Funktion immer wieder aufgerufen wird und damit auch anlge erhöht wird und sich das Dreieck somit dreht...
Brauche Hilfe ;-)
mfg
RoCMe
Das Dreieck wird normal angezeigt, aber dreht sich nicht. Nach meiner Vorstellung sollte aber gerade das pasieren - der Aufruf von glutMainLoop() bewirkt doch, das die vorher deklarierten Funktionen immer wieder durchlaufen werden - sprich das angle immer wieder erhöht wird und das Dreieck dann um den Winkel angl