* 출처 : OpenGL로 배우는 3차원 컴퓨터 그래픽스, 한빛아카데미
GLUT은 매우 짧은 시간 간격으로 이벤트 루프를 돌기 때문에 어떤 경우에는 큐에 새로운 이벤트가 아직 하나도 안 들어가 있는 때도 있다. 아이들 콜백을 정의하면 이 경우에도 콜백 함수를 만들어 필요한 일을 할 수 있다.
예제를 통해서 알아보자.
#include <glut.h>
#include <gl/GL.h>
#include <gl/GLU.h>
GLfloat Delta = 0.0;
void MyDisplay() {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POLYGON);
glColor3f(0.0, 0.5, 0.8);
glVertex3f(-1.0 + Delta, -0.5, 0.0);
glVertex3f(0.0 + Delta, -0.5, 0.0);
glVertex3f(0.0 + Delta, 0.5, 0.0);
glVertex3f(-1.0 + Delta, 0.5, 0.0);
glEnd();
glutSwapBuffers();
}
void MyIdle() {
Delta = Delta + 0.0001;
glutPostRedisplay();
}
int main(int argc, char** argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_RGB | GLUT_DOUBLE);
glutInitWindowSize(300, 300);
glutInitWindowPosition(0, 0);
glutCreateWindow("OpenGL Drawing Example");
glClearColor(1.0, 1.0, 1.0, 1.0);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glOrtho(-1.0, 1.0, -1.0, 1.0, 1.0, -1.0);
glutDisplayFunc(MyDisplay);
glutIdleFunc(MyIdle);
glutMainLoop();
return 0;
}
이 코드는 사각형을 점차 오른쪽으로 움직이게 하는 애니메이션 프로그램이다.
1-1) 전역 변수 Delta : 사각형을 오른쪽으로 옮기는데에 사용, x축으로 Delta만큼 이동된 곳에 새로운 사각형이 그려짐
1-2) MyIdel() : Delta 변수를 0.0001만큼 증가
1-3) MyDisplay() :
- glClear(GL_COLOR_BURRER_BIT) : 기존 컬러 버퍼 내용을 지움 -> 이 함수가 없으면 새로운 사각형이 원래의 사각형에 겹쳐서 그려짐
- glutSwapBuffers() : 이 함수위의 코드들은 백 버퍼에 적용되는데 이 백 버퍼에 적용된 코드들을 버퍼 스와핑 명령을 통해 프런트 버퍼가 됨 -> 따라서 새로 생성된 사각형을 보일 수 있게 됨
'기타 > 컴퓨터 그래픽스 & OpenGL' 카테고리의 다른 글
[OpenGL] 평행 투상과 원근 투상 / 2022.10.24 (0) | 2022.10.24 |
---|---|
[OpenGL] 타이머 콜백 / 2022.10.24 (0) | 2022.10.24 |
[OpenGL] 메뉴 콜백 / 2022.10.23 (0) | 2022.10.23 |
[OpenGL] 마우스 콜백 / 2022.10.23 (0) | 2022.10.23 |
[OpenGL] 리셰이프 콜백 / 2022.10.23 (0) | 2022.10.23 |