학기 중 배웠던 내용을 바탕으로 미니 프로젝트를 제작해보았다. 전체적인 내용은 여러 개의 teapot들이 놀이공원의 기구처럼 돌아가는 것이고, 여기에 주전자의 모양이나 배경색을 변경할 수 있도록 구현하였다. 그리고 이 프로젝트의 목표는 '학기 중 배웠던 기능들을 빠짐없이 구현하기'로 잡았다. 

 

기본적인 화면 구성의 모습은 다음과 같다.

 

기본 화면

지금부터 프로젝트에서 구현한 기능들에 대해서 설명하겠다.

 

첫 번째, 윈도우의 크기가 변하더라도 화면의 오브젝트들에는 영향을 끼치지 않도록 화면 왜곡 제거 기능을 구현했다.

기본 화면 (왼쪽)          /          화면 크기가 변경된 모습 (오른쪽)

두 번째, 실제 놀이기구처럼 모든 teapot들이 함께 움직이도록 구현하였다. 이는 '계층 구조 모델링'을 이용하여 모든 오브젝트들이 동시에 움직이도록 할 수 있었다.

 

세 번째, teapot의 움직임은 키보드 콜백과 타이머 콜백을 이용하여 구현하였다. 같은 기능이지만, 각각의 루트로 기능을 실행하기 위해서는 키보드와 메뉴를 통해 할 수 있도록 해놓았기 때문에 겹침을 없게 하였다.

 

네 번째, 화면의 색상을 변경할 수 있도록 하였다. 이것은 마우스 콜백을 이용하여 구현하였다. 또한 IsBlue라는 boolean형의 변수를 이용하여, true일 경우에 (=왼쪽 마우스 버튼이 눌림) 베경이 하늘색으로 바뀌고, false일 경우에 (=눌리지 않은 경우)기본 옵션인 하얀색으로 설정되도록 하였다.

 

다음은 더 많은 기능을 구현하기 위해 메뉴 기능을 구현하였다. 메인 메뉴의 구성은 밑의 이미지와 같고, Exit항목을 제외한 나머지는 서브메뉴가 있다. 서브메뉴는 teapot을 자동으로 움직이게 하는 기능과 형태를 변경하는 기능을 수행한다.

자동 움직임은 IsAuto라는 Boolean형 변수를 사용하였는데, false를 디폴트로 하여 메뉴 항목을 선택하지 않았을 경우에는 정지된 상태를 유지하게 하였다. 또한 teapot의 형태는 Wire나 Solid를 선택할 수 있게 하였고, 각 메뉴를 선택했을 시 변경이 되도록 IsWire라는 Boolean형 변수를 이용하였다.

 

메인 메뉴
2가지 서브 메뉴

마지막으로 현재 teapot의 형태가 무엇인지 출력하는 문자열을 구현하였다. 이는 티스토리의 '멈춤보단 천천히라도'의 글을 참고하였다. 자세한 주소는 다음과 같다. https://webnautes.tistory.com/1092

 

OpenGL 강좌 - 정사각형 그리기

OpenGL 프로그래밍을 위한 준비과정은 다음 포스팅을 참고하세요. [그래픽스&컴퓨터비전/Augmented Reality] - OpenGL( freeGLUT ) 을 Visual Studio 2015에 연동하기 [그래픽스&컴퓨터비전/Augmented Reality] -..

webnautes.tistory.com

완성된 코드는 다음 cpp파일을 통해 확인할 수 있다.

Spin_Teapot.cpp
0.00MB

'OpenGL' 카테고리의 다른 글

[OpenGL] 5. 선형보간  (0) 2019.07.19
[OpenGL] 4. 메뉴 콜백  (0) 2019.07.16
[OpenGL] 3. 키보드 콜백  (0) 2019.07.10
[OpenGL] 2. 마우스 콜백  (0) 2019.07.05
[OpenGL] 1. 삼각형 그리기  (0) 2019.07.05

+ Recent posts