您的位置:首页 > 运维架构

制作一个基于MFC对话框的OpenGL类

2014-04-11 13:29 267 查看
来源:http://www.yesky.com/342/1917842.shtml
在我的程序中,需要在一个小的对话框中创建一个OPENGL绘制窗口,所以略去了其中的全屏和常屏显示功能。

创建步骤如下:
1.创建一个新的类COpenGLWnd,基于CWnd类。
1.1 重载Create函数,在其中创建一个窗口用以绘制
void COpenGL::Create(CRect rect, CWnd *parent)
{
if (m_bInit) return;
ASSERT(rect);
ASSERT(parent);
m_rect = rect;
m_parent = parent;
CString className = AfxRegisterWndClass(CS_HREDRAW | CS_VREDRAW | CS_OWNDC,NULL,(HBRUSH)GetStockObject(BLACK_BRUSH),NULL);
CreateEx(0,className,"OpenGL",WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS| WS_CLIPCHILDREN | CS_SAVEBITS,rect,parent,0);
}
1.2 创建消息映射函数OnCreate,OnPaint,OnSize函数,以及InitGL,KillGLWindow完成OPENGL绘制类的基本工作。RenderScene函数中OPENGL的场景渲染代码。

至此,OPENGL绘制窗口类已经被封装好,只需要在调用它的对话框类中将它实例化就OK了!

2. 在CMotionViewDlg类中,包含此绘制类的头文件。
2.1 在对话框中加入一个static控件,设置为不可见(取消visible选项);在OnInitDialog()中加人下面这段代码(假设控件ID为IDC_OPENGL,m_openGL是类COpenGL的对象):
CRect rect;
GetDlgItem(IDC_OPENGL)->GetWindowRect(rect);
ScreenToClient(rect);
m_openGL.Create(rect, this);
2.2 在适当的地方调用RenderScene方法
void COpenGL::RenderGLScene()
{
if(!m_bInit) return;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // Clear Screen And Depth Buffer
glLoadIdentity();
glTranslatef(0.0f,-30.0f,-200.0f);
glRotatef(40.0, 0.0, 1.0, 0.0);
// 渲染代码测试
glColor3f(0.5, 0.5, 0.5);
glBegin(GL_LINES);
for (int i = -100; i <= 100; i += 20)
{
glVertex3f(i, 0.0, -100.0);
glVertex3f(i, 0.0, 100.0);
glVertex3f(-100.0, 0.0, i);
glVertex3f(100.0, 0.0, i);
}
glEnd();
SwapBuffers(m_hDC);
Invalidate(FALSE);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: