<출처 : http://blog.naver.com/silzon?Redirect=Log&logNo=30021587464>
안녕하세요 ^^
오랜만에 OpenGL 강좌를 올리네요.
그동안 저한테 많은 일들이 일어났네요.
학교 근처 2년 반동안 지냈던 자취방을 떠나, 회사 근처로 이사도 하고, 간지 나는 노트북도 샀네요 ^^
주저리 주저리~
:::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
MFC Dlg (다이알로그) 기반에 OpenGL 셋팅 하기
OpenGL 을 이용하여, 빨간 사격형을 띄어 보도록 하자 !
완성 프로그램 : http://blog.naver.com/silzon/30021589980 위 링크에서 파일을 다운 받길 바란다.
많은 부분이 http://blog.naver.com/silzon/30018236413 이 내용과 겹칩니다.
다만, 차이점은 http://blog.naver.com/silzon/30018236413 여기서는 싱글 도규먼트 기반이었고,
이 강좌는 다이알로그 기반으로 셋팅을 하겠습니다.
마찬가지로 MFC, 또는 자신의 컴퓨터에 OpenGL 이 셋팅이 안되어 있다면,
http://blog.naver.com/silzon/30016391858 다음 링크를 참조 하기 바란다.
그리고, 이 MFC 에서 OpenGL 의 셋팅 방법에 정석 이란 없다.
분명 내 코드에서도, 불필요한 코드가 있을 것이고, 비효율적인 코드도 있을 수도 있다.
이 점을 참고 하여, 봐주길 바란다.
또한, 셋팅이 다 된 프로그램을 압축해서 올렸다.
다음부터, MFC 를 이용하여 OpenGL 프로그래밍을 할때는, 아래와 같이 일일이 셋팅을 해주지 말고,
압축해논 것을 복사 한 후, 압축을 풀어서 하면 수고를 덜 수 있다.
하지만, 명심 해야 할 것은, 처음 OpenGL 다루는 것이라면, 어느정도 셋팅 하는 것에 익숙해져야 할 것이다.
:::: 1 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
Microsoft Visual C++ 을 실행 시킨 후,
1) MFC Wizard(exe) 를 클릭
2) Project name 입력
3) Location 설정 ( Location 은 까먹지 말도록 하자 )
4) OK 버튼 클릭
:::: 2 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
1) Dialog based 체크
2) 나머진 안 건드려도 되므로, Finish 클릭
:::: 3 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
다음과 같은 창이 뜰 것이다.
1) 왼쪽 하단에 Class View 탭을 클릭 한다
2) PrivilegeDlg classes + 를 클릭하여 트리를 열어 준다.
3) CPrivilegeDlgDlg + 를 클릭하여 트리를 열어 준다.
4) OnPaint() 함수가 보인다.
OnPaint() 함수가 일반 싱글 도큐먼트에서 OnDraw() 함수와 비슷 하다.
(사실 OnDraw() 함수는 OnPaint() 의 일부이다. )
:::: 4 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
1) OnPaint() 함수를 더블클릭!
2) 그럼 OnPaint() 함수 내용이 보인다.
우리가 주로 코딩 해줄 부분은 else 부분이다.
:::: 5 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
자, 이제부터 기본적인 OpenGL 셋팅에 들어간다.
일반 싱글 도큐먼트에서 OpenGL 셋팅 했던 방법과 매우 동일 하다. ( 참조 : http://blog.naver.com/silzon/30018236413 )
HGLRC 타입의 변수 m_hRC 와 HDC 타입의 변수 m_hDC 변수를 생성할 것이다.
1) CPrivilegeDlgDlg 에 마우스 올려 놓고, 마우스 오른쪽 클릭!
2) Add Member Variable... 클릭!
:::: 6 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
다음과 같이 적어 주고, OK 버튼을 클릭 한다.
마찬가지로
HDC 타입의 변수 m_hDC 변수도 만들어 준다.
:::: 7 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
다음과 같이 두 전역 변수가 생겼는지 확인한다.
:::: 8 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
OnSize() 함수를 만들자.
1) 컨트롤 + w 를 눌러 클래스 위자드를 실행 시킨다.
2) Project, Class name, Object IDs 를 확인 한다.
3) Messages 에서 WM_SIZE 를 더블클릭(반드시 더블클릭!) 후, Edit Code 버튼을 누른다.
:::: 9 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
OnSize() 함수 안을 다음과 같은 내용으로 코딩을 한다.
허걱! GLResize() 함수가 없다!
:::: 10 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
GLResize() 함수를 만들자!
1) CPriviegeDlgDlg 마우스 오른쪽 버튼을 클릭 한 후
2) Add Member Function... 클릭!
:::: 11 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
다음과 같이 입력 후, OK 버튼을 클릭 한다!
:::: 12 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
void 타입의 GLResize() 함수가 생성 되었다.
GLResize() 함수 내부의 내용은 다음과 같이 코딩을 해준다.
:::: 13 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
음~ 이제 뭘 할까..??
OnCreate() 함수를 만들자!
1) 컨트롤 + w 를 눌러 컨트롤 위자드를 실행 시킨다.
2) 마찬가지로, Project 등을 확인 한 후, Messages 에서 WM_CREATE 를 더블 클릭!
3) Edit code 버튼 클릭!
:::: 14 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
OnCreate() 함수의 내용을 다음과 같이 입력 한다.
:::: 15 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
에휴... OpenGL 처음 셋팅하는게 가장 짜증이 납니다 ^^;;;
자, OnDestroy() 함수를 만듭시다!
1) 컨트롤 + w 를 눌러 클래스 위자드를 실행 시킵니다.
2) 마찬가지로, Project 등을 확인 한후, Messeages 에서 WM_DESTROY 를 더블 클릭후! Edit Code 를 클릭 합니다.
:::: 16 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
OnDestroy() 함수를 다음과 같은 내용으로 입력 합니다.
:::: 17 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
아!!!! 제일 처음에 헤더파일 추가 하는것을 안 했다...
현재까지 F7 이나 F5 를 누르면 엄청난 11개의 오류를 토해 낼 것이다.
미안한 일이지만, 이 시점에서 프로젝트 셋팅과 헤더 파일을 추가 하도록 하자 ^^
순서만 바뀐것이지, 아무 문제는 없다! (안심하도록... -_-;;)
1) 메뉴 -> Project -> Settings... 클릭!
:::: 18 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
1) Settings For 에서 Win32 Debug 를 확인한다. ( 만약 Release 모드에서 개발한다면, Win32 Release 로 바꾼다 )
2) Link 탭 클릭
3) Object/librry modules 를 다음과 같이 써준다. ( 반드시, MFC 와 자신의 컴퓨터에 OpenGL 이 셋팅이 되어 있어야 된다. )
4) OK 버튼 클릭!
:::: 19 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
1) 왼쪽 하단의 File view 탭 클릭
2) Header Files 폴더 속에 있는 StdAfx.h 더블 클릭!
3) 빨간 박스에 있는 내용 입력! ( 예, #include <gl/gl.h> )
이제 F7 이나 F5 누르면 에러가 안 날것이다.
:::: 20 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
///;; 없네;; 원래 없는 거임;;
:::: 21 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
1) Class View 탭에서 CPrivilegeDlgDlg 마우스 오른쪽 버튼 클릭
2) Add Member Function... 클릭!
:::: 22 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
1) Type 과 선언을 다음과 같이 입력 후 OK 버튼 클릭!
:::: 23 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
1) GLRenderScene() 함수를 다음과 같이 입력 해준다.
:::: 24 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
자!!! 이제 F5 를 눌러서 실행 시켜 보도록 하자!!!!!
아무것도 안 뜬다. ㅋㅋ
OnPaint() 함수를 살짝 수정 하도록 하자!
1) OnPaint() 함수 더블 클릭!
2) else 아래 부분에 빨간 박스 안에 있는 내용을 입력 한다!
3) 자! 이제 진짜로 F5 눌러 보자!
:::: 25 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
아.......................
TODO : 대화 상자 컨트롤을 여기에 두십시오..... 이건 뭘까...
지워 보도록 하자 -_-;;
:::: 26 :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
1) 오른쪽 하단의 Resource View 탭 클릭
2) IDD_PRIVILEGEDLG_DIALOG 더블 클릭
하면 다음과 같은 그림이 나온다.
여기서, TODO:대화 상자 컨트롤을 여기에 두십시오. 라는 문장 근처에 마우스 왼쪽 클릭 하면 선택이 되어 진다.
선택 한 후, delete 키 누르면 싹 지워진다.!
::: 결과 및 마치면서 ::::::::::::::::::::::::::::::::::::::::::::::::
Dlg 기반이라고 해서 싱글 도큐먼트 기반과 별 다른 점이 없다는 것을 여러분을 알 수 있을 것이다.
더욱 더 알찬 강좌 내용으로 여러분을 뵙도록 하겠다!
'old drawer > OpenGL' 카테고리의 다른 글
[OpenGL] 물체 중심점을 원점으로 물체 회전하기 (0) | 2013.06.12 |
---|---|
[OpenGL] 관련 링크 (0) | 2013.05.07 |
[OpenGL] OpenGL 라이브러리 설치 방법 (0) | 2013.04.29 |
[OpenGL] 윈도우 사이즈 변경에 따른 왜곡 방지 (0) | 2011.10.12 |
[OpenGL] glClear()와 glClearColor()의 차이 (0) | 2011.09.28 |