[OpenGL] OpenGL 애니메이션 만들기

OpenGL 애니메이션 만들기

도형이나 물체가 알아서 움직이는 것을 애니메이션, 비디오라고 불린다.

sphere가 움직이는 애니메이션 만들기

sphere가 우측으로 5번, 좌측으로 5번 움직이는 코드다.
#include <GL/freeglut.h>
#include <stdio.h>

void draw(void)
{
    glClearColor(1.0f, 1.0f, 1.0f, 1.0f);
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    glClearColor(1.0, 1.0, 1.0, 1.0); // 배경 색상
    glColor4f(0.0, 0.0, 1.0, 1.0); //그림 색상

  float Tx;
  for (int i = 0; i < 10; i++)
    {
      glClear(GL_COLOR_BUFFER_BIT); // 그림 초기화
      if (i < 5)
        Tx = 0.1;
      else
        Tx = -0.1;

      glTranslatef(Tx, 0.0, 0.0);
      glutWireSphere(0.1, 20, 20);
      Sleep(1000);
      glFlush();
  }
}

int main(int argc, char** argv)
{
    glutInit(&argc, argv);

    glutInitDisplayMode(GLUT_SINGLE | GLUT_RGBA | GLUT_DEPTH);
    glutInitWindowPosition(800, 200);
    glutCreateWindow("Example");

    glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
    glMatrixMode(GL_MODELVIEW);

    glutDisplayFunc(draw);
    glutMainLoop();
}



실행 결과



주의 할점

for문안에 glClear() 함수를 사용해서 그림을 초기화 해줘야 한다. glClear 함수를 사용 하지 않으면 아래 실행 결과처럼 된다.
 
for (int i = 0; i < 10; i++)
  {
    glClear(GL_COLOR_BUFFER_BIT); // 이 함수를 지우고 지우고 해보셈.
    if (i < 5)
      Tx = 0.1;
    else
      Tx = -0.1;

    glTranslatef(Tx, 0.0, 0.0);
    glutWireSphere(0.1, 20, 20);
    Sleep(500);
    glFlush();
  }


실행 결과 

댓글

이 블로그의 인기 게시물

[Arduino] 아두이노 초음파 센서(HC-SR04) 사용하기

[Arduino] 아두이노 조이스틱 사용하기

[자연 환경] 농약의 장단점 농약이 환경과 인간에게 미치는 영향