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
'College Computer Science > Computer Graphics' 카테고리의 다른 글
[컴퓨터그래픽스] 키보드 마우스 입력을 통한 화면 변경 (0) | 2021.04.03 |
---|---|
[컴퓨터그래픽스] openGL 사용하지 않고 culling 수행하기 (0) | 2021.04.03 |
[컴퓨터그래픽스] transformation, scale, rotation (0) | 2021.04.03 |
[컴퓨터그래픽스] 소용돌이 실습 (함수 사용하지 않기) (0) | 2021.04.03 |
[컴퓨터그래픽스] 세가지 방법으로 오각형 그리기, OpenGL에서 primitive 그리기, glVertex, glDrawArrays, glDrawElements (0) | 2020.05.22 |
댓글