OpenGL 렌더링 결과를 보여주기 위해 필요한 윈도우(UI)와 OpenGL 컨텍스트 생성을 MFC로 처리하는 방법을 설명합니다.
64비트 윈도우(x64)에서 OpenGL 2.x API를 사용하여 프로그래밍을 하는 경우를 대상으로 하고 있습니다.
Visual Studio 2017 Community를 사용해서 진행했지만 다른 버전에서도 거의 동일하게 동작할 듯합니다.
이제 다이얼로그기반 MFC 프로젝트 생성부터 예제 코드 실행까지 단계별로 설명하겠습니다.
MFC 응용 프로그램 생성
GLEW 라이브러리 추가
UI 구성
OpenGL 관련 코드 추가
테스트
관련 포스팅
참고한 사이트
MFC 응용 프로그램 생성
Visual Studio 2017을 실행시키고 메뉴에서 파일 > 새로 만들기 > 프로젝트를 선택합니다.
MFC 응용 프로그램을 선택하고 프로젝트 이름을 지정해 줍니다.
MFC 응용 프로그램 마법사가 시작됩니다.
현재 프로젝트 설정을 보여주는데 추가 설정을 위해 다음을 클릭합니다.
대화 상자 기반을 선택하고 마침을 클릭합니다.
메뉴 아래에 보이는 솔루션 구성을 Debug, 솔루션 플랫폼을 x64로 변경합니다.
프로젝트에 추가하게 되는 GLEW 라이브러리가 Release용이지만 MFC 디버깅을 위해 Debug로 설정합니다.-
이제부터 Visual Studio 2017에서 OpenGL 개발을 하기위해 필요한 라이브러리를 프로젝트에 추가하는 방법을 설명합니다.
프로젝트 이름이 OpenGL with MFC이고 프로젝트 위치가 C:\Users\사용자이름\Documents\Visual Studio 2017\Projects\OpenGL with MFC인 경우로 가정하고 설명합니다.
사용하시는 환경에 맞추어 적절히 변경하시면 됩니다.
GLEW 라이브러리 추가
OpenGL 3.x 이상에서는 호출 가능한 OpenGL API 함수들이 런타임에 결정됩니다.
GLEW를 사용하여 런타임에 OpenGL API 함수를 호출합니다.
아래 링크에서 GLEW를 다운로드 받을 수 있습니다.
Windows 32-bit and 64-bit를 클릭하여 미리 라이브러리를 컴파일해둔 바이너리를 다운로드 받습니다.
압축을 풀은 후, include 폴더를 복사하여
프로젝트 폴더의 경로 OpenGL with MFC\OpenGL with MFC에 붙여넣기해줍니다.
기존에 생성된 include 폴더에 추가로 복사되어 집니다.
압축을 풀은 폴더의 경로 glew-2.0.0-win32\glew-2.0.0\lib\Release\x64에 있는 glew32.lib, glew32.lib를 복사하여
프로젝트 폴더의 경로 OpenGL-Example\OpenGL-Example\lib에 붙여넣기 해줍니다.
GLEW 라이브러리를 사용하여 컴파일한 실행 파일과 같이 glew32.dll 파일을 배포해야 합니다.
아직 실행 파일이 저장되는 폴더가 생성되어 있지 않기 때문에 dll 파일을 복사해줄 위치가 아직 없습니다.
아직 코드를 추가하지 않았지만 Visual Studio에서 Ctrl + F7를 눌러 컴파일을 해주면 실행파일이 저장될 위치를 위한 폴더들이 생성됩니다.
압축을 풀은 폴더의 경로 glew-2.0.0-win32\glew-2.0.0\bin\Release\x64에 있는 glew32.dll 파일을 복사하여
프로젝트 폴더의 경로 OpenGL with MFC\x64\Debug에 붙여넣기 해줍니다.
UI 구성
OpenGL의 렌더링 결과가 보여질 영역이 필요합니다.
오른쪽 끝에 위치한 도구 상자를 클릭 후 Picture Control을 드래그하여 다이얼로그에 추가합니다.
Picture Control을 배치한 결과입니다.
버튼은 이후 코드 수정시 사용하게 될 거 같아서 남겨두었습니다.
다이얼로그 위에 있는 Picture Control을 선택한 상태에서 속성을 클릭합니다.
ID를 IDC_PICTURE로 수정하고 엔터를 눌러 변경합니다.
다시 다이얼로그 위에 있는 Picture Control을 선택하고 마우스 오른쪽 버튼을 클릭하여 메뉴에서 변수 추가를 선택합니다.
멤버 변수 추가 마법사 창의 변수 이름 항목에 m_picture를 입력하고 마침을 클릭합니다.
OpenGL 관련 코드 추가
Ctrl + Shift + X를 눌러서 클래스 마법사를 실행합니다.
클래스 이름을 COpenGLwithMFCDlg로 변경합니다.
메시지 탭을 선택하고 메시지 리스트에서 WM_DESTROY를 선택 후 처리기 추가를 클릭합니다.
같은 방식으로 WM_TIMER도 선택해서 추가하고 확인을 클릭합니다.
OpenGL with MFCDlg.h 파일에 GLEW 헤더파 일과 라이브러리 파일를 지정해줍니다.
// OpenGL with MFCDlg.h : 헤더 파일 |
OpenGL with MFCDlg.h 파일 끝에 필요한 멤버함수 및 멤버 변수를 추가해줍니다.
public: |
OpenGL with MFCDlg.cpp 파일의 OnInitDialog 함수에 붉은색 줄을 추가합니다.
// TODO: 여기에 추가 초기화 작업을 추가합니다. |
OnDestroy 함수에 다음 붉은색 줄을 추가합니다.
void COpenGLwithMFCDlg::OnDestroy() |
OnTimer 함수에 붉은색 코드를 추가합니다.
void COpenGLwithMFCDlg::OnTimer(UINT_PTR nIDEvent) |
OpenGL with MFCDlg.cpp 파일에 GetRenderingContext 함수를 추가합니다.
BOOL COpenGLwithMFCDlg::GetRenderingContext() |
OpenGL with MFCDlg.cpp 파일에 GetOldStyleRenderingContext 함수를 추가합니다.
BOOL COpenGLwithMFCDlg::GetOldStyleRenderingContext() |
테스트
F5를 눌러서 실행시켜 봅니다.
관련 포스팅
OpenGL과 MFC 연동 예제( GLEW 사용, Dialog 기반, OpenGL 3.x 코드)
http://webnautes.tistory.com/1109
참고한 사이트
http://www.cs.uregina.ca/Links/class-info/315/WWW/Lab1/MFC/
'OpenGL' 카테고리의 다른 글
Python으로 배우는 Modern OpenGL - 2. 삼각형 그리기(Vertex Buffer Object) (0) | 2018.12.16 |
---|---|
Python으로 배우는 Modern OpenGL - 1. 개발환경 만들기 (0) | 2018.12.01 |
OpenGL과 MFC 연동 예제( GLEW 사용, Dialog 기반, OpenGL 3.x 코드) (25) | 2017.05.26 |
OpenCV로 얻은 Camera 영상을 OpenGL 배경과 Cube 텍스쳐(texture)로 사용하기 (4) | 2016.12.30 |
OpenCV로 얻은 Camera 영상을 OpenGL 배경으로 사용하기 (7) | 2016.12.30 |
시간날때마다 틈틈이 이것저것 해보며 블로그에 글을 남깁니다.
블로그의 문서는 종종 최신 버전으로 업데이트됩니다.
여유 시간이 날때 진행하는 거라 언제 진행될지는 알 수 없습니다.
영화,책, 생각등을 올리는 블로그도 운영하고 있습니다.
https://freewriting2024.tistory.com
제가 쓴 책도 한번 검토해보세요 ^^
그렇게 천천히 걸으면서도 그렇게 빨리 앞으로 나갈 수 있다는 건.
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!