College Computer Science/Computer Graphics
[컴퓨터그래픽스] gluLookat 변경을 통한 애니메이션 만들기
2den
2021. 4. 3. 17:41
728x90
반응형
#include <glut.h>
//#include <stdio.h>
int g_timeDelta = 0, g_prevTime = 0;
GLfloat g_x = 0.f;
GLfloat g_velocityX = 0.f;
void RenderScene(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glMatrixMode(GL_MODELVIEW);
g_x += g_velocityX + (GLfloat)g_timeDelta / 1000.f;
//printf("%f", g_x);
glLoadIdentity();
gluLookAt(g_x, 0.f, -0.1f, g_x, 0.f, 0.f, 0.f, 1.f, 0.f);
glColor3f(1.0f, 1.0f, 1.0f);
glRectf(.25, .25, -.25, -.25);
glutSwapBuffers();
}
void SetupRC(void)
{
glClearColor(0.0f, 0.0f, 0.0f, 1.0f);
}
void Idle()
{
int currentTime = glutGet(GLUT_ELAPSED_TIME);
g_timeDelta = currentTime - g_prevTime;
g_prevTime = currentTime;
glutPostRedisplay();
}
int main(int argc, char* argv[])
{
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DOUBLE | GLUT_RGBA);
glutCreateWindow("Assignment5");
glutDisplayFunc(RenderScene);
glutIdleFunc(Idle);
SetupRC();
glutMainLoop();
return 0;
}
설명
glLoadIdentity ();
gluLookAt ( g_x , 0. f , - 0.1 f , g_x , 0. f , 0. f , 0. f , 1. f , 0. f );
glColor3f ( 1.0 f , 1.0 f , 1.0 f );
glRectf ( .25 , .25 , - .25 , - .25 );
offset은 지난 프로젝트에서 설정한 g_x를 그대로 사용하였다. 이것을 gluLookAt에 적용하는데, 눈의 위치와 눈이 바라보는 위치를 둘다 변경해주어야 계속 정면을 응시할 수 있다. 따라서 첫번째와 네번째 인자를 g_x로 변경한다.
glutInitDisplayMode ( GLUT_DOUBLE | GLUT_RGBA );
애니메이션이기 때문에 버퍼를 더블로 설정해줬다.
실행결과는 아래 exe 파일을 참고하세요 (그냥 결과 화면입니다 :D)
728x90
반응형