OpenGL Пусте вікно

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;

}