直接在MFC的对话框上利用OpenGL绘制图形

    借鉴前人的经验,如链接http://www.cnblogs.com/phinecos/archive/2007/07/28/834916.html介绍了如何利用MFC的单文档来使用OpenGL(本文也是借鉴了这篇文章的代码),还有的是链接http://blog.csdn.net/wangsky2/article/details/17678171介绍了在MFC对话框中使用OpenGL,但是它是使用了WM_TIMER消息。

    而我的这篇文章是没有使用WM_TIMER消息在MFC对话框中使用OpenGL,从而揭示了一个困扰我很久的问题,而这个问题其实本身与MFC自身相关的,上传的程序可以在如下的链接下载:http://download.csdn.net/detail/hurricanecqj/8650733

    先看一看程序的结果吧:

程序结果图

    一开始,我是在OnInitDialog函数里面设置像素格式以及创建OpenGL的渲染环境,然后在OnSize函数里面添加如下的视口、投影设置的代码:

  //设置视口
  glViewport(0,0,cx, cy);


  glMatrixMode(GL_PROJECTION);
  glLoadIdentity();
  gluOrtho2D(0.0,500.0,0.0,500.0);

  glMatrixMode(GL_MODELVIEW);
  glLoadIdentity();

但是,当我的程序一开始运行的时候,上面的代码根本没有起作用,显示出来的效果是平面直角坐标的中心为对话框客户区的中心,坐标系的长度为[-1,1],这到底是什么原因了?我试验了很久,最终解决了,原来MFC是先调用OnSize函数,然后再调用OnInitDialog函数的,所以,一开始由于还没有成功初始化OpenGL,因此在OnSize函数里面的OpenGL代码是无效的,解决办法我想到了两个

    1)就是在OnInitDialog函数中,OpenGL初始化代码完成后,加入上面的代码;

    2)或者在PreSubclassWindow函数中放入OpenGL初始化代码(也就是设置像素格式和创建OpenGL渲染环境)。

 

阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页