Без анімації
#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;
}