지금까지 잘 따라오셨습니다. 우린 하얀색 삼각형이 있는 OpenGL 창을 만들어 보았지만 전혀 재미가 없었지요. 그렇지만 이제부터가 시작입니다.! 지금부터 삼각형을 살살 돌려보도록하죠 :)
우선 main 함수에 몇가지를 더 추가해줘야합니다. 첫째, GLUT 에 이중버퍼(double buffer)가 필요하다고 알려주는 것이죠. 이중버퍼는 부드러운 애니메이션을 만들기 위해서 꼭 필요한 것입니다. 이중버퍼는 후면버퍼(back buffer)에 그림을 다 그리고 나서 전면 버퍼(우리가 실제로 보는 장면, front buffer)로 교체하는데, 이렇게 해서 렌더링을 수행합니다. 이중버퍼는 장면의 깜빡임을 제거할 때도 사용합니다.
두번째로 설정해줘야할 것은 GLUT 에게 어플리케이션의 휴면(Idle) 시간에 렌더링 함수가 호출되도록 알려주는 것입니다. 이렇게 해주면 GLUT 가 계속해서 렌더링 함수를 호출하기 때문에 결과적으로 애니메이션이 만들어지는 것입니다. GLUT 는 glutIdleFunc 함수를 제공하는데 이 함수로 어플리케이션의 휴면(Idle) 시간에 호출될 콜백 함수를 등록할 수 있습니다.
void glutIdleFunc(void (*func)(void));
인자설명:
func - 어플리케이션의 휴면(Idle) 시간에 호출될 함수의 이름입니다.
우리가 만들 예제는 어플리케이션의 휴면(idle) 시간에 호출되는 함수를 renderScene 함수로 설정하고 깊이 검사가 가능하도록 설정합니다. OpenGL 은 깊이 검사를 알아서 설정해 주지 않기 때문에 깊이 검사를 설정하지 않으면 물체가 그려질 때 앞뒤 순서가 맞지 않게 그려집니다. 다행인 것은 깊이 검사를 설정하는게 쉽다는 거죠. 아래의 main 함수처럼 설정해주면 됩니다.