2007. 9. 20. 16:25ㆍHW & SW
이 내용은 http://blog.naver.com/silzon 블로그의 내용을 기반으로 구성되었다.
=======================================================================================
glut.h :: program \ Microsoft Visual Studio \ VC98 \ include \ GL 폴더 속에 넣어준다.
Lib files :: program \ Microsoft Visual Studio \ VC98 \ Lib 폴더 속에 넣어준다.
Dll files :: Windows(WINNT) \ system 폴더 속에 넣어준다.
=======================================================================================
Step 1.
Dialog Base 기본 MFC를 구성.
(항상 초기 구성후 Build를 한번 해주어 Classview에서 Class가 사라지는 것을 방지)
Step 2.
CopenGLbaseDlg에 HGLRC 타입의 변수 m_hRC 와 HDC 타입의 변수 m_hDC 변수를 생성.
Step 3.
1) 컨트롤 + w 를 눌러 클래스 위자드를 실행 시킨다.
2) Project: openGLbase, Class name: COpenGLbaseDlg, Object IDs: COpenGLBaseDlg 를 확인 한다.
3) Messages 에서 WM_SIZE 를 더블클릭(반드시 더블클릭!) 후, Edit Code 버튼을 누른다.
4) 다음 코드를 작성한다.
void COpenGLbaseDlg::OnSize(UINT nType, int cx, int cy)
{
CDialog::OnSize(nType, cx, cy);
// TODO: Add your message handler code here
VERIFY(wglMakeCurrent(m_hDC,m_hRC));
GLResize(cx,cy);
VERIFY(wglMakeCurrent(NULL,NULL));
}
Step 4.
1) GLResize() 함수 생성
2) 다음 코드를 작성한다.
void COpenGLbaseDlg::GLResize(int cx, int cy)
{
GLfloat fAspect;
if(cy==0) cy=1;
glViewport(0,0,cx,cy);
fAspect = (GLfloat)cx / (GLfloat)cy;
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective(60.0f, fAspect, 1.0f, 10000.0f);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
}
Step 5.
1) 컨트롤 + w 를 눌러 클래스 위자드를 실행 시킨다.
2) Project: openGLbase, Class name: COpenGLbaseDlg, Object IDs: COpenGLBaseDlg 를 확인 한다.
3) Messages 에서 WM_CREATE 를 더블클릭(반드시 더블클릭!) 후, Edit Code 버튼을 누른다.
4) 다음 코드를 작성한다.
int COpenGLbaseDlg::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CDialog::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: Add your specialized creation code here
int nPixelFormat;
m_hDC = ::GetDC(m_hWnd);
static PIXELFORMATDESCRIPTOR pfd =
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW|
PFD_SUPPORT_OPENGL|
PFD_DOUBLEBUFFER,
PFD_TYPE_RGBA,
24,
0,0,0,0,0,0,
0,0,
0,0,0,0,0,
32,
0,
0,
PFD_MAIN_PLANE,
0,
0,0,0
};
nPixelFormat = ChoosePixelFormat(m_hDC, &pfd);
VERIFY(SetPixelFormat(m_hDC,nPixelFormat, &pfd));
m_hRC = wglCreateContext(m_hDC);
VERIFY(wglMakeCurrent(m_hDC,m_hRC));
wglMakeCurrent(NULL,NULL);
return 0;
}
Step 6.
1) 컨트롤 + w 를 눌러 클래스 위자드를 실행 시킨다.
2) Project: openGLbase, Class name: COpenGLbaseDlg, Object IDs: COpenGLBaseDlg 를 확인 한다.
3) Messages 에서 WM_DESTROY 를 더블클릭(반드시 더블클릭!) 후, Edit Code 버튼을 누른다.
4) 다음 코드를 작성한다.
void COpenGLbaseDlg::OnDestroy()
{
wglDeleteContext(m_hRC);
::ReleaseDC(m_hWnd, m_hDC);
CDialog::OnDestroy();
// TODO: Add your message handler code here
}
Step 7.
1) Settings For 에서 Win32 Debug 를 확인한다.
( 만약 Release 모드에서 개발한다면, Win32 Release 로 바꾼다 )
2) Link 탭 클릭
3) Object/librry modules 를 다음과 같이 써준다. - opengl32.lib glu32.lib glut32.lib glaux.lib
( 반드시, MFC 와 자신의 컴퓨터에 OpenGL 이 셋팅이 되어 있어야 된다. )
4) OK 버튼 클릭!
Step 8.
1) 왼쪽 하단의 File view 탭 클릭
2) Header Files 폴더 속에 있는 StdAfx.h 더블 클릭!
3) 다음을 입력
#include <gl/gl.h>
#include <gl/glu.h>
#include <gl/glut.h>
#include <gl/glaux.h>
Step 9.
1) GLRenderScene() 함수 생성
2) 다음 코드를 작성한다.
void COpenGLbaseDlg::GLRenderScene()
{
glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
glColor3f(1.0f, 0.0f, 0.0f);
glPushMatrix();
glEnable(GL_DEPTH_TEST);
glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
glShadeModel(GL_FLAT);
glLoadIdentity();
gluLookAt(0.0f, 0.0f, 1000.0f, 0.0f, 10.0f, 0.0f, 0.0f, 1.0f, 0.0f);
//To draw meshes of object of something you want, Just code here
////////////////////////////////////////////////////////////////
glBegin(GL_TRIANGLES);
glVertex3f(-100,0,0);
glVertex3f(0,100,0);
glVertex3f(100,0,0);
glEnd();
////////////////////////////////////////////////////////////////
glPopMatrix();
glFlush();
}
Step 10.
1) onPaint함수 수정
2) 다음 코드를 작성한다.
void COpenGLbaseDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
wglMakeCurrent(m_hDC, m_hRC);
GLRenderScene();
SwapBuffers(m_hDC);
wglMakeCurrent(m_hDC,NULL);
}
}
*SDI기반과 MDI기반에서도 설정 방법은 유사하다.
Step 1.
Library 추가
Step 2.
StdAfx.h에 헤더파일 추가
Step 3.
view클래스에 멤버 전역 변수 두개 추가 (m_hDC, m_hRC)
Step 4.
WM_SIZE 메시지 함수 추가
Step 5.
GLResize 함수 생성
Step 6.
WM_SIZE 메시지 함수인 onCreate 추가
Step 7.
onDraw함수에 내용 추가
(Dialog 베이스에서 onPaint함수에 적용된 내용 추가)
Step 8.
GLRenderScene 함수 생성
void CtestDlg::GLRenderScene()
{
glLoadIdentity(); //행렬을 초기화
glClearColor(1.0f, 1.0f, 1.0f, 0.0f);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT); //현재 버퍼를 비워줌
glColor3f(1.0f, 0.0f, 0.0f); //버텍스의 색깔을 흰색으로 셋팅
glPushMatrix();
glEnable(GL_DEPTH_TEST); //깊이 테스트 On
glColorMaterial(GL_FRONT,GL_AMBIENT_AND_DIFFUSE);
gluLookAt(0.0f, 0.0f, 1000.0f, 0.0f, 10.0f, 0.0f, 0.0f, 1.0f, 0.0f); //카메라 설정
//카메라의 위치는 (0,0,1000)에 있으며, 카메라가 바라보는 곳은(0,10,0)이다.
//카메라의 Up Vector는 (0,1,0)이다.
//To draw meshes of object of something you want, Just code here
////////////////////////////////////////////////////////////////
glBegin(GL_QUADS);
glVertex3f(-50,-50,0);
glVertex3f(50,-50,0);
glVertex3f(50,50,0);
glVertex3f(-50,50,0);
glEnd();
////////////////////////////////////////////////////////////////
glFlush();
}
Step 9.
WM_DESTROY 메시지 함수인 onDestroy 추가
'HW & SW' 카테고리의 다른 글
LPSTR, LPCSTR, LPTSTR, LPCTSTR (0) | 2007.09.20 |
---|---|
멀티미디어 타이머 (0) | 2007.09.20 |
Intel JPEG Library 1.51 (0) | 2007.09.19 |
Intel JPEG Library 1.1 (0) | 2007.09.19 |
센서의 출력이 전류일 경우 전압으로 측정하기 (0) | 2007.09.18 |