2075 / C++ / Додатково / OpenGL / Пусте вікно
Без анімації #include <GL/glut.h> void Init(void) { glClearColor(1.0, 0.0, 0.0, 1.0); // очистити червоним glMatrixMode(GL_PROJECTION); // тип матриці glLoadIdentity(); // скинути усі параметри glOrtho(-300.0, 300.0, -300.0, 300.0, -5.0, 5.0); // простір для малювання //glMatrixMode(GL_MODELVIEW); - для моделі //glTranslatef(50.0, -50.0, 0.0); - зсув //glScalef(0.5, 0.5, 0.5); - масштаб //glRotatef(15.0,0.0,0.0,1.0); - обертання } void Draw(void) { glClear(GL_COLOR_BUFFER_BIT); glFlush(); // виконувати для GLUT_SINGLE } int main(int argc, char** argv) { glutInit(&argc, argv); // глобальна ініціалізація glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB); // RGB - кольори // GLUT_SINGLE - статична картинка, GLUT_DOUBLE - анімація (додатковий буфер) glutInitWindowSize(600, 600); // розмір glutInitWindowPosition(100, 10); // позиція вікна glutCreateWindow("Назва"); // назва вікна Init(); // ініціалізація glutDisplayFunc(Draw); // малюємо glutMainLoop(); // головний цикл return 0; }
З анімацією #include <GL/glut.h> //#include <math.h> #include <iostream> float winW = 600.0; float winH = 600.0; float angle = 0.0; float scale = 0.0; void Init(void) { glClearColor(0.0, 0.0, 0.0, 1.0); glMatrixMode(GL_PROJECTION); glLoadIdentity(); glOrtho(-winW/2, winW/2, -winH/2, winH/2, -300.0, 300.0); //glMatrixMode(GL_MODELVIEW); } void Draw(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0,1.0,1.0); glPushMatrix(); // копія scale = 1.0 - 1.0/sin(3.14 * angle / 90.0); std::cout << sin(3.14 * angle / 90.0); glRotatef(angle, 0.0, 0.0, 1.0); // повільніший спосіб з glPushMatrix та glPopMatrix() glScalef(scale, scale, 1.0); glBegin(GL_LINES); for (float i = -winW / 2; i <= winW / 2; i+=20.0) { glVertex2f(i, -winW / 2); glVertex2f(i, winW / 2); } for (float i = -winH / 2; i <= winH / 2; i += 20.0) { glVertex2f(-winH / 2,i); glVertex2f(winH / 2,i); } glEnd(); glPopMatrix(); // відновлення glPushMatrix, скидаємо обертання glutSwapBuffers(); // міняємо буфери } void Timer(int) { //glRotatef(1.0, 0.0, 0.0, 1.0); // просте обертання, швидший ++angle; glutPostRedisplay(); // Draw() - те семе - перемалювати glutTimerFunc(25, Timer, 0); } int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGB); glutInitWindowSize(winW, winH); glutInitWindowPosition(100, 10); glutCreateWindow("Назва"); Init(); glutDisplayFunc(Draw); glutTimerFunc(25, Timer, 0); // затримка до запуску, функція, параметр glutMainLoop(); return 0; }