学习OpenGL - 1

我想开发一个2D行业矢量图形编辑程序,从资料上了解到OpenGL比较适合开发类似于CAD的图形软件,就准备用VS 2005 + OpenGL写。以前没有学过Computer Graphics,于是就买了《Interactive Computer Graphics》、《曲线与曲面的数学》、《CAGD曲线与曲面》慢慢啃。看了一个多星期,了解了一些Spline、Bezier、B-Spline、Non-Uniform Rational B-Spline等曲线的数学模型。

今天下午从网上下载了GLUT 3.7,把学习平台搭起来了,Visual Studio 2005 + GLUT 3.7,试着编译了几个Sample,全部通过。现在有了学习的平台了。

OpenGL是一种跨平台的图形库,开发的图形程序可运行于多种操作系统上。但这并不意味着在不同的平台上开发基于OpenGL的图形程序所编写的的代码完全一样,因为OpenGL独立于window system(如Microsoft Windows、X Window System等),要运行于这些window system之上,必须要使用少量指定的类似于“胶水”的routine将OpenGL图形库与window system“粘”在一起,例如:对于X Window System,OpenGL提供了一个X Extension--GLX将它与X Window System“粘”在一起;对于Windows,Windows API提供了一个扩展--WGL Extension(Windows + OpenGL),WGL包含了function和structure。在各种平台上的OpenGL中,除了“胶水”routine,其它的内容完全一样。

我的想法是利用MFC + OpenGL来构建程序。以前写过一些MFC的程序,可作为界面开发的工具,用OpenGL来完成图形的处理工作。

在基于MFC的程序中,要使用OpenGL在各种View中显示图形,对AppWizard生成的视图类进行如下改造:

  1. 修改OnPreCreate()函数
    加上:
    cs.style |= WS_CLIPSIBLINGS | WS_CLIPCHILDREN;
    OpenGL要求所有的window都具有此属性。
  2. 修改OnCreate()函数
    在中间加上初始化OpenGL库的代码,创建OpenGL的Rendering Context并使之与window的Device Context相关联。设置PixelFormat、颜色等属性。
  3. 修改OnSize()函数
    使Window的尺寸发生变化时,相应地调整OpenGL的viewvort、projection等。
  4. 在OnDraw()函数中显示图形
    一般用法为:
    // Clear out the color & depth buffers
    ::glClear( GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT );
    RenderScene();
    // Tell OpenGL to flush its pipeline
    ::glFinish();
    // Now Swap the buffers
    ::SwapBuffers( m_pDC->GetSafeHdc() );
    显示图形的代码可放于RenderScene()中。
  5. 修改OnEraseBkgnd()函数
    //return CView::OnEraseBkgnd(pDC);
    //Tell Windows not to erase the background
    return TRUE
  6. 修改OnDestroy()函数
    加上:
    //Make the RC non-current
    if(::wglMakeCurrent(0,0) == FALSE)
    {
        MessageBox("Could not make RC non-current");
    }



    //Delete the rendering context
    if(::wglDeleteContext(m_hRC) == FALSE)
    {
        MessageBox(_T("Could not delete RC"));
    }
    //Delete the DC
    if(m_pDC)
    {
        delete m_pDC;
    }
    //Set it to NULL
    m_pDC = NULL;
    这样,一个支持OpenGL的MFC基本框架就初步建好了。
在Visual Studio 2005上编译链接时,不用指定相关的LIB,但用VS 98时必须指定相关的LIB。 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值