일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- ABEEK
- reverse proxy
- StatelessWidget
- c
- progress
- 플러터
- BlurDrawable
- 맨붕
- c++
- 앱 기획
- rotate circle
- flutter
- StatefulWidget
- 기술인증
- Engineer Australia
- 호주 이민
- HTML 게임 엔진
- Android
- quintus
- PowerMockup
- first_app
- game engine
- first flutter app
- 블러 효과
- nginx
- 공학인증
- flutter progress dialog
- ipad
- 회전판
- OpenGL
- Today
- Total
우동우동우's note
[OpenGL] Study Note 3 : 나의 첫번째 OpenGL App In Window 본문
지난번 Note에서는 Mac에서 OpenGL 예제를 컴파일 하는 것을 구현해보았다.
이번 Note는 윈도우 환경에서 구현을 하는 예제를 보여주겠다.
지난번 컴파일러에는 Visual Studio 2010 과 Dev-C++ 로 2가지가 있다고 얘기하였다.
이번 예제에서는 이 두가지를 활용하여 프로젝트를 구성하고 개발하는 예제를 보여주도록 하겠다.
Visual Studio 2010
일반적으로 윈도우 어플을 개발할 때면 Visual Studio를 활용함으로 이번 예제만 Visuall Studio를 활용하여 OpenGL 셋팅하는 방법을 보여주도록 하겠다.
1. 새 프로젝트를 만든다.
여기서 Win32 프로젝트를 선택한다.
그리고 프로젝트 이름은 MyFirstApp으로 한다.
2. 다음!
3. 빈프로젝트 선택 후 마침을 클릭!
4. main.cpp파일 생성
우선 코드는 아래에 나와있는 코드를 넣으면 된다.
그러고 컴파일을 해보자 그러면 검은 화면에 삼각형이 나타날 것이다. 그러면 끝이다. ㅎㅎ 참 쉽죠?!
main.cpp
#include <windows.h> #include <gl/glut.h> void onDisplay(void); void onDisplay(void) { // 화면 리셋 glClear(GL_COLOR_BUFFER_BIT); // 삼각형 그리기 시작 glBegin(GL_TRIANGLES); // 모서리 지정 glVertex2f(0.0, 0.5); glVertex2f(-0.5, -0.5); glVertex2f(0.5, -0.5); // 삼각형 그리기 종료 glEnd(); // flush glFlush(); } int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance ,LPSTR lpszCmdParam,int nCmdShow) { glutCreateWindow("My First App"); // 윈도우 만들기 glutDisplayFunc(onDisplay); // 디스플레이 함수 설정해주기 glutMainLoop(); // 시작하기 return 0; }
main.cpp
Dev-C++
Visual Studio 2010을 사용해서 예제를 컴파일을 해보았다. 그리고 이번에는 Dev-C++를 활용해서 예제를 컴파일 해보자.
1. 새 프로젝트 생성
Window Application을 선택하고 프로젝트 명을 MyFirstApp으로 입력한다. 그리고 확인!
2. main.cpp 작성.
Dev-C++생성을 하면 main.cpp파일에 내용이 채워져 있을 것이다. 우선 이 내용을 지우고 위에 있는 main.cpp 의 내용을 복사해서 넣으면 된다. 이 상태에서 컴파일을 하면 컴파일 에러가 나타날 것이다. 이는 몇몇 라이브러리가 포함이 되지 않아서 발생하는 에러이다.
3. 라이브러리 링크 추가하기
프로젝트 옵션에서 매개변수에 아래와 같이 링커에 추가해주면 된다.
자 이제 컴파일을 해보시길..
이제 소스에 대해서 알아보자.
main.cpp 소스 분석
WinMain 함수
glutCreateWindow("My First App"); // 윈도우 만들기 glutDisplayFunc(onDisplay); // 디스플레이 함수 설정해주기 glutMainLoop(); // 시작하기 return 0;
위 내용은 WinMain함수 내부에 선언된 것이다.
- glutCreateWindow() 함수는 최상위 창을 생성하는 함수로 파라미터로는 char * name을 받는다. name파라미터는 최상위 창의 이름을 나타내게 된다.
- glutDisplayFunc() 함수는 Display Callback 함수를 나타낸다. 파라미터로는 함수의 포인터를 넣어주면 된다.
- glutMainLoop() 함수는 glut main loop 로 들어가는 함수 이다.
void onDisplay(void) { // 화면 리셋 glClear(GL_COLOR_BUFFER_BIT); // 삼각형 그리기 시작 glBegin(GL_TRIANGLES); // 모서리 지정 glVertex2f(0.0, 0.5); glVertex2f(-0.5, -0.5); glVertex2f(0.5, -0.5); // 삼각형 그리기 종료 glEnd(); // flush glFlush(); }
이번 예제에서는 onDisplay함수에서 화면을 그리는 로직을 구현해놓았다.
우선 Reference 문서의 위치는 다음과 같다. [http://www.opengl.org/sdk/docs/man/] 여기서 필요한 OpenGL의 라이브러리의 사용방법을 확인할 수 있다. 문서를 확인해보면 생각보다 적다. OpenGL의 라이브러리가 API의 양이 방대할 것으로 생각했었는데 생각보다 적어서 조금 놀래기도 했다. 쩝. 잘 만들면 이렇게 적은 양(약 250개)의 API 만으로도 그 많은 프로그램들이 개발이 된것을 보면 참 신기하다.
자 이제 공부를 해보자.
함수를 하나 씩 확인해보자.
- glClear() : 화면 버퍼를 정해진 값으로 초기화하는 함수이다. 여기의 파라미터로는 GLbitfield mask가 있다. mask 파라미터는 원하는 bit를 초기화하는 것을 말한다. mask의 값으로는 GL_COLOR_BUFFER_BIT, GL_DEPTH_BUFFER_BIT, GL_STENCIL_BUFFER_BIT 이렇게 3가지가 있다. 일단은 이런 값이 있다는 것을 알고 넘어가면 될 것 같다. 나중에 각 함수별로 상세히 알아보는 포스팅을 할 예정이다.
- GL_COLOR_BUFFER_BIT
- GL_DEPTH_BUFFER_BIT
- GL_STENCIL_BUFFER_BIT
- glBegin() : 이 함수는 OpenGL 2.x 버전까지 존재하며 3.x 부터 사라진 것 같다. 쩝.. 시중에 나와있는 예제를 보고 만들다 보니.. 이런 내용을 포함 하게되었다. 해당 포스팅에 대한 내용은 Stack OverFlow에서 다뤄진 이슈인 것 같다. 참고하자. 일단 glBegin은 특정 도형을 그릴 때 시작을 한다는 것을 알려주고 파라미터로 어떤 모양인지(GLenum mode)에 대한 것을 넣게 된다. 본 예제에서는 GL_TRIANGLES를 사용하여 삼각형을 그린다고 하였다.
- glEnd() : glBegin과 같이 3.x 버전부터 삭제된 함수이다. 우선 glBegin을 마친다는 함수이다.
- glFlush() : 입력된 GL명령어들을 강제적으로 수행하는 함수이다. 이 함수가 불려져야 화면에 표시되니 빠뜨리지 말자.
- glVertex() : glBegin에서 정의한 모양의 꼭지점을 찍는다고 생각을 하면 될것 같다. 이번 예제에서 (0, 0.5), (-0.5, 0.5), (-0.5, -0.5)이렇게 3개의 점을 정의하였다. 삼각형이 그려지려면 3개의 점이 필요하니 말이다.
마지막으로 이제 기본적 셋팅에 대한 내용은 포스팅하지 않을 예정이다. 일단 현재 사용하고 있는 glut만으로 충분히 학습하는데는 이상이 없다고 한다. 나중에 필요시 추가적으로 내용에 살을 붙이도록 하겠다.
'C & C++ > OpenGL Study' 카테고리의 다른 글
[OpenGL] Study Note 5 : OpenGL Draw Triangle (삼각형 그리기) (0) | 2013.11.22 |
---|---|
[OpenGL] Study Note 4 : GLEW(OpenGL Extension Wrangler Library) 세팅 방법 Win + Visual Studio 2010 (0) | 2013.11.22 |
[OpenGL] Study Note 2 : 나의 첫번째 OpenGL App In Mac (2) | 2013.11.18 |
[OpenGL] Study Note 1 : 개발 환경 설정 (Window) (0) | 2013.11.18 |