MFC框架下OpenGL程序的实现步骤

本文详细介绍了如何在Microsoft Visual Studio .NET 2003中利用MFC框架创建OpenGL程序。通过新建MFC多文档应用程序,添加WSDView类并实现双缓存、鼠标交互等功能,实现了在MFC环境中绘制并交互3D对象,例如茶壶。
摘要由CSDN通过智能技术生成

  

   本文主要介绍如何在MFC框架下编写OpenGL程序。现有的OpenGL参考书多是介绍基于AUX库,或是基于GLUT库的Win32 OpenGL程序。这类程序结构非常简单,主要目的是让读者熟悉OpenGL语言的用法及功能。然而不得不承认,编写可视化程序MFC框架有其独到的优势,本文就是针对这种需求,详细介绍MFC框架下OpenGL程序的实现步骤。

       编译器:Microsoft Visual Studio.NET 2003(中文版)

       准备工作下载OpenGL非标准额外GLUT库文件http://www.openglsource.com/download/download.htm包括glut.h, glut32.lib, glut32.dll。将glut.h放到目录VC2003.NET/Vc7/PlatformSDK/Include/gl下,glut32.lib放到目录VC2003.NET/Vc7/PlatformSDK/Lib下,再将glut32.dll放进WINDOWS/system32中,最后设置编译器的链接:【项目】-【属性页】-【链接器】-【输入】-【附加依赖项】-glut32.lib

      具体实现步骤:

1.       新建MFC多文档应用程序,项目名取为Render

2.       新建两个文件WSDView.hWSDView.cpp,并将这两个文件放入项目文件夹内。具体代码见附录。两文件的功能:创建类CWSDView,它继承自CView,成员函数包括设置像素格式,创建渲染描述表,各类鼠标消息相应函数如鼠标左键拖动,右键拖动及滚轴转动等。

3.       【文件】-【添加现有项】,选取WSDView.h, WSDView.cpp文件。

4.       RenderView.h文件中添加代码 #include "WSDView.h"

class CRenderView : public CView修改为class CRenderView : public CWSDView

RenderView.cpp文件中修改IMPLEMENT_DYNCREATE(CRenderView, CView)IMPLEMENT_DYNCREATE(CRenderView, CWSDView);修改  BEGIN_MESSAGE_MAP(CRenderView, CView)BEGIN_MESSAGE_MAP(CRenderView, CWSDView)

5.       CRenderView类中添加虚拟函数virtual void RenderScene(void)。实际上它是继承自父类CWSDView

6.       CRenderView::OnDraw(CDC* /*pDC*/)内添加代码:

  // TODO: 在此处为本机数据添加绘制代码

    //双缓存应用

    static BOOL bBusy = FALSE;

    if(bBusy)     return;

    bBusy = TRUE;

    //背景色

    glClearColor( 0.0f , 0.0f , 0.0f , 1.0f );

    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);//清缓存

    glMatrixMode(GL_MODELVIEW);//启动模型矩阵

    glLoadIdentity();//初始化模型矩阵

    //  绘制动作 

    glTranslatef(0.0, 0.0, -8.0); //将场景移至可视区

    RenderScene();//绘制场景

    glFinish();//完成绘制

    SwapBuffers(wglGetCurrentDC());//双缓存应用:更新缓存

    bBusy = FALSE;

7.       CRenderView::RenderScene(void)内添加代码:

       glPushMatrix();

       //控制操作如下,与鼠标消息相应函数相关:

       glTranslatef(m_translateX, m_translateY, 0.0);

       glRotatef(rotate_x, 1.0, 0.0, 0.0);

       glRotatef(rotate_y, 0.0, 1.0, 0.0);

       glScalef(m_scale, m_scale, m_scale);

       //绘制实体 例如茶壶

       glPushMatrix();

       glColor 3f (0.5, 0.5, 0.5);

       glutSolidTeapot(0.3);

       glPopMatrix();

       glPopMatrix();

       Ok,至此基本框架已经搞定。按照上述步骤,编译运行显示结果:黑色

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值