Головна‎ > ‎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;
}