본문 바로가기
College Computer Science/Computer Graphics

[컴퓨터그래픽스] gluLookat 변경을 통한 애니메이션 만들기

by 2den 2021. 4. 3.
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)

gluLookat.exe
0.01MB

 

728x90

댓글