#include #include float kat=0; float kat2=45; float kat3=0; float delta = 1; float delta2 = 1; float delta3 = 1; float alfa=0.0; void uklad() { glBegin(GL_LINES); glColor3f(0.0, 1.0, 0.0); //zielona oś X glVertex3f(-5.0, 0.0, 0.0); glVertex3f(5.0, 0.0, 0.0); glColor3f(0.0, 0.0, 1.0); // niebieska oś Y glVertex3f(0.0, -5.0, 0.0); glVertex3f(0.0, 5.0, 0.0); glColor3f(0.0, 0.0, 0.0); // czarna oś Z glVertex3f(0.0, 0.0, -5.0); glVertex3f(0.0, 0.0, 5.0); glEnd(); } void noga() { glBegin(GL_POLYGON); //sposob laczenia, polygon - po kolei laczy wierzcholki glColor3f(1, 0.2, 0.0); //kolor wierzch. w rgb, glVertex3f(-0.2, 0.0, -0.2); glVertex3f(-0.2, 0.0, 0.2); glVertex3f(-0.2, 2.0, 0.2); glVertex3f(-0.2, 2.0, -0.2); glEnd(); glBegin(GL_POLYGON); //sposob laczenia, polygon - po kolei laczy wierzcholki glColor3f(1, 0.2, 0.0); //kolor wierzch. w rgb, glVertex3f(-0.2, 0.0, -0.2); glVertex3f(0.2, 0.0, -0.2); glVertex3f(0.2, 2.0, -0.2); glVertex3f(-0.2, 2.0, -0.2); glEnd(); glBegin(GL_POLYGON); //sposob laczenia, polygon - po kolei laczy wierzcholki glColor3f(1, 0.2, 0.0); //kolor wierzch. w rgb, glVertex3f(0.2, 0.0, -0.2); glVertex3f(0.2, 0.0, 0.2); glVertex3f(0.2, 2.0, 0.2); glVertex3f(0.2, 2.0, -0.2); glEnd(); glBegin(GL_POLYGON); //sposob laczenia, polygon - po kolei laczy wierzcholki glColor3f(0.5, 0.2, 0.0); //kolor wierzch. w rgb, glVertex3f(0.2, 0.0, 0.2); glVertex3f(-0.2, 0.0, 0.2); glVertex3f(-0.2, 2.0, 0.2); glVertex3f(0.2, 2.0, 0.2); glEnd(); glFlush(); glTranslatef(0.0,2.0,0.0); glColor3f(0.2, 0.2, 0.2); glutSolidSphere(0.4,24,24); glFlush(); } void podloga() { glBegin(GL_POLYGON); //sposob laczenia, polygon - po kolei laczy wierzcholki glColor3f(0.8, 0.8, 0.8); //kolor wierzch. w rgb, glVertex3f(3.0, 0.0, -3.0); //wierzcholki x y z w (3f - 3 wierzcholki float) glVertex3f(-3.0, 0.0, -3.0); glVertex3f(-3.0, 0.0, 3.0); glVertex3f(3.0, 0.0, 3.0); glEnd(); glFlush(); } void init() { glClearColor(1.0,1.0,1.0,1.0); //kolor tła okna glEnable(GL_DEPTH_TEST); // włączenie testu głębokości glMatrixMode(GL_PROJECTION); gluPerspective(45.0, 1.0, 0.1, 20.0); //geometria widzenia, parametry: //szerokokatnosc w pionie alfa, stosunek poziomu do pionu, //odkad rzutowac, dokad rzutowac. gluLookAt(-3.0, 8.0, -8.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); glMatrixMode(GL_MODELVIEW); // nic więcej na stosie rzutowania // się nie znajdzie } void scena() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity();// przed kolejną klatką animacyjną // na stosie modelowania nie mogą // znajdować się żadne macierze z // poprzedniej klatki animacyjnej uklad(); podloga(); glColor3f(1.0, 0.0, 0.0); glPushMatrix(); glRotatef(kat3,0.0f,1.0f,0.0f); glRotatef(kat,0.0f,1.0f,0.0f); noga(); glTranslatef(0.0,0.4,0.0); glRotatef(kat2,0.0f,0.0f,0.4f); noga(); glPopMatrix(); glFlush(); glutSwapBuffers(); // zamiana buforów koloru } void anim() { if (kat>=45) { delta2 = -2; } if (kat<=-45) { delta2 = 2; } kat+=delta2; if (kat2>=90) { delta = -5; } if (kat2<=-90) { delta = 5; } if( kat3 == 360 ) { kat3 = 0; } else { kat3 += 5; } kat2+=delta; glutPostRedisplay(); } void main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE | GLUT_DEPTH ); glutInitWindowSize(800,800); glutInitWindowPosition(20,20); glutCreateWindow("Scena testowa"); glutDisplayFunc(scena); glutIdleFunc(anim); init(); glutMainLoop(); }