有的人说,学习要按部就班,学了几年的编程稍有点感悟,个人觉得面对技术的不断变化,以及需求的不断变更,如果按部就班的来搞,人生0.5的时间就浪费了,很多时候问自己,why I do need to learn from the beginner?ask myself why? 群里朋友说,先把MFC学好吧,多练练glut吧,shit,等我学好MFC再从Opengl+MFC了解起,黄花菜都凉了。下面是我查阅了别人的资料,自己加以修改实现的MFC下跑Opengl的程序,总结一下。

It is a good idea to isolate opengl functions from MFC Framework. SO I recommend you to create GLRender class with the fllowing picture showing:

新建MFC时候,选项不同,下图的结构也不同

注解:BOOL GLRender::PrepareScene(HDC hDC)//该函数放在OpenGL2View.cpp----OnCreate事件中,设置像素格式;创建opengl上下文

  void GLRender::DrawScene()//该函数放在OpenGL2View.cpp----OnPaint事件中,Opengl绘画的内容都放于此

  void GLRender::Reshape(int cx, int cy)//该函数放在OpenGL2View.cpp----OnSize事件中,MFC窗体变化时重绘内容。

BOOL GLRender::SetWindowPixelFormat(HDC hDC)
{
PIXELFORMATDESCRIPTOR pixelDesc=
{
sizeof(PIXELFORMATDESCRIPTOR),
1,
PFD_DRAW_TO_WINDOW|PFD_SUPPORT_OPENGL|
PFD_DOUBLEBUFFER|PFD_SUPPORT_GDI,
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
}; this->m_GLPixelIndex = ChoosePixelFormat(hDC,&pixelDesc);
if(this->m_GLPixelIndex==0)
{
this->m_GLPixelIndex = 1;
if(DescribePixelFormat(hDC,this->m_GLPixelIndex,sizeof(PIXELFORMATDESCRIPTOR),&pixelDesc)==0)
{
return FALSE;
}
} if(SetPixelFormat(hDC,this->m_GLPixelIndex,&pixelDesc)==FALSE)
{
return FALSE;
}
return TRUE;
}

  

BOOL GLRender::CreateGLContext(HDC hDC)
{
this->m_hGLContext = wglCreateContext(hDC);
if(this->m_hGLContext==NULL)
{//创建失败
return FALSE;
} if(wglMakeCurrent(hDC,this->m_hGLContext)==FALSE)
{//选为当前RC失败
return FALSE;
} return TRUE;
}

  

BOOL GLRender::PrepareScene(HDC hDC)
{ if(this->SetWindowPixelFormat(hDC)==FALSE)
{
return 0;
}
if(this->CreateGLContext(hDC)==FALSE)
{
return 0;
}
}

  

void GLRender::Reshape(int cx, int cy)
{
GLsizei width,height;
GLdouble aspect;
width = cx;
height = cy;
if(cy==0)
{
aspect = (GLdouble)width;
}
else
{
aspect = (GLdouble)width/(GLdouble)height;
}
glViewport(-100,0,width+100,height+100);
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluOrtho2D(0.0,500.0*aspect,0.0,500.0);
glMatrixMode(GL_MODELVIEW);
glLoadIdentity();
x_width=width;
y_height=height;
}

  

void GLRender::DrawScene()
{
glLoadIdentity();
glClearColor(0.0f, 0.0f, 0.0f, 0.0f) ;
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //
// Set up the camera
// glMatrixMode(GL_PROJECTION);
glLoadIdentity(); // Determine the screen size so we can determine the aspect ratio
int width, height;
width=x_width;
height=y_height;
GLdouble aspectratio = GLdouble(width) / GLdouble(height); // Set the camera parameters
gluPerspective(25., // Vertical FOV degrees.
aspectratio, // The aspect ratio.
10., // Near clipping 40/130
200.); // Far clipping // Set the camera location
glMatrixMode(GL_MODELVIEW);
glLoadIdentity(); gluLookAt(20., 10., 50., // eye x,y,z
0., 0., 0., // center x,y,z
0., 1., 0.); // Up direction //
// Some standard parameters
// // Enable depth test
glEnable(GL_DEPTH_TEST); // Cull backfacing polygons
glCullFace(GL_BACK);
glEnable(GL_CULL_FACE); // Draw a coordinate axis
glColor3d(0., 1., 1.); glBegin(GL_LINES);
glVertex3d(0., 0., 0.);
glVertex3d(12., 0., 0.);
glVertex3d(0., 0., 0.);
glVertex3d(0., 12., 0.);
glVertex3d(0., 0., 0.);
glVertex3d(0., 0., 12.);
glEnd(); //
// INSERT DRAWING CODE HERE
// glFlush();
}

  

DestorySecene函数没有写。简单点就是:准备创建场景;绘制场景;窗口变化时重新绘制场景,虽然简单还是费了不少功夫。通过该框架只需要修改DrawScene的内容,就可以实现不同内容绘制,如果要用glut,把与winds相关的内容删除掉,将glutDisplayFunc那个函数与DrawScene绑定即可,别的文件就不需要修改嘞。如下图

http://download.csdn.net/detail/wuxiaoyan_1988/5828815全部代码这里下载。

vs2010 MFC Opengl实现的更多相关文章

  1. VS2010/MFC编程入门之五(MFC消息映射机制概述)

    VS2010/MFC编程入门之五(MFC消息映射机制概述)-软件开发-鸡啄米 http://www.jizhuomi.com/software/147.html 上一讲鸡啄米为大家简单分析了MFC应用 ...

  2. VS2010/MFC编程入门之四(MFC应用程序框架分析)

    VS2010/MFC编程入门之四(MFC应用程序框架分析)-软件开发-鸡啄米 http://www.jizhuomi.com/software/145.html   上一讲鸡啄米讲的是VS2010应用 ...

  3. VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)

    VS2010/MFC编程入门之三(VS2010应用程序工程中文件的组成结构)-软件开发-鸡啄米 http://www.jizhuomi.com/software/143.html   鸡啄米在上一讲中 ...

  4. VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)

    VS2010/MFC编程入门之二(利用MFC向导生成单文档应用程序框架)-软件开发-鸡啄米 http://www.jizhuomi.com/software/141.html   上一讲中讲了VS20 ...

  5. VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解)

    原文地址: VS2010/MFC编程入门之一(VS2010与MSDN安装过程图解)-软件开发-鸡啄米 http://www.jizhuomi.com/software/139.html   上一讲中鸡 ...

  6. VS2010/MFC编程入门教程之目录和总结

    鸡啄米的这套VS2010/MFC编程入门教程到此就全部完成了,虽然有些内容还未涉及到,但帮助大家进行VS2010/MFC的入门学习业已足够.以此教程的知识为基础,学习VS2010/MFC较为深入的内容 ...

  7. VS2010配置OpenGL开发环境

    OpenGL(Open Graphics Library)是一个跨编程语言.跨平台的专业图形程序接口.OpenGL是SGI公司开发的一套计算机图形处理系统,是图形硬件的软件接口,任何一个OpenGL应 ...

  8. 《VS2010/MFC编程入门教程》——读书笔记

    推荐两个比较好的学习网站:http://v.dxsbb.com/jisuanji/555/ http://www.jizhuomi.com/software/257.html MFC全称Microso ...

  9. VS2010/MFC编程入门之五十二(Ribbon界面开发:创建Ribbon样式的应用程序框架)

    上一节中鸡啄米讲了GDI对象之画刷CBrush,至此图形图像的入门知识就讲完了.从本节开始鸡啄米将为大家带来Ribbon界面开发的有关内容.本文先来说说如何创建Ribbon样式的应用程序框架. Rib ...

随机推荐

  1. JAVA网站高并发解决方案

    一个小型的网站,比如个人网站,可以使用最简单的html静态页面就实现了,配合一些图片达到美化效果,所有的页面均存放在一个目录下,这样的网站对系统架构.性能的要求都很简单,随着互联网业务的不断丰富,网站 ...

  2. java使用jdbc对sqlite 添加、删除、修改的操作

    package com.jb.jubmis.Dao.DaoImpl; import java.io.File;import java.io.FileInputStream;import java.io ...

  3. VM VirtualBox 上安装 CentOs6.4(详细)

    在网上下载:CentOS-6.4-i386-bin-DVD1.iso镜像. 这是我在VBox上安装CentOs6.4的过程: 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12 ...

  4. Linux内核完全注释之编程语言和环境(二)

    c程序的编译和链接 使用gcc汇编器编译c语言程序时通常会经历四个阶段,即预处理阶段.编译阶段.汇编阶段.链接阶段,如下图. 例如: gcc -o hello hello.c 生成可执行文件hello ...

  5. JAVA 开发实例 一 移动的小球

    package com.java.move; import java.awt.Color; import java.awt.Dimension; import java.awt.Graphics; i ...

  6. eclipse界面语言的切换方法

    很久以前在我一个朋友的blog上看到过关于eclipse中英文语言界面切换的方法,觉得挺不错,后来自己也用过几次 现在想想,这个方法真的很不错,刚才又在自己机器上做了几次试验,发现eclipse事实上 ...

  7. SCCM客户端推送/卸载

    站点配置--站点--层次结构设置--自动批准客户端 ccm客户端安装日志:服务器端的ccm.log安装ccm客户端,需要添加一个具有访问客户端$admin权限的账户,如下:站点名称-右键 客户端安装设 ...

  8. myeclipse 10 载入新的项目报错Cannot return from outside a function or method

    myeclipse 10 载入新的项目报错Cannot return from outside a function or method 解决方法: 方法一: window -->prefere ...

  9. Jquery Mobile 百度地图 Demo

    首先非常感谢franck分享的Demo! Demo截图: 下面是franck对此Demo的说明: 原理:1.通过百度拾取坐标系统获得点位的坐标. http://api.map.baidu.com/lb ...

  10. AlarmDemo-with-Database

    https://github.com/anuj7sharma/AlarmDemo-with-Database