基于MFC对话框的OpenGL三维图形开发
来源:互联网 发布:c语言编辑简单的游戏 编辑:程序博客网 时间:2024/05/01 18:44
以三维动态球体模型来讲述基于MFC对话框的OpenGL编程
1.基本思想
在Windows98/NT平台下,GDI是原始窗口的图形接口。而GDI实现这些是通过一个设备描述表DC来实现的。现在通过OpenGL绘图需要创建绘图描述表RC。但是RC并不能直接完成绘图,只能与特定的DC联系起来,从而完成具体的绘图工作。最后要注意释放RC和DC。
现在以Windows2000为例,首先将glu.dll,glu32.dll,glut.dll,glut32.dll,opengl32.dll文件拷贝到操作系统WINNT/System32目录下,将gl.h,glaux.h,glu.h,glut.h拷贝到Microsoft Visual Studio/VC98/Include/GL目录中中,将glaux.lib,glu32.lib,glut32.lib,opengl32.lib拷贝到Microsoft Visual Studio/VC98/Lib目录中;然后在编译程序的时候选择Project|Setting菜单,在Link标签中的Object/library modules编辑框中输入“opengl32.lib, glut32.lib ,glu32.lib,glaux.lib”。到这时候环境就建立好了,可以进行下面的具体编程工作。
本实例采用基于对话框的工程。至于用单文档方式和多文档方式其编程原理是一样的,这里不再作单独介绍。
2.1创建项目文件。选择File|New菜单项,新建一个基于对话框的项目文件MyDlgOpenGL;
2.2 修改对话框模板。删除对话框中的静态文本,调整控件的位置。
2.3 创建新类,添加消息映射。选择View|ClassWizard菜单项,打开MFC对话框,在Add Class之中选择New,以便添加一个新类COpenGL,且该类的基类选择generic CWnd;最后利用MFC ClassWizard为COpenGL类添加消息WM_CREATE,WM_PAINT的映射。
2.4 添加代码。
int COpenGL::MySetPixelFormat(HDC hdc)
{
}
现在就可以在OnCreate函数中创建绘图描述表。其代码如下:
int COpenGL::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
}
在OpenGL.h中定义函数LightShine函数,作为添加光源和材质属性的函数。在该函数中将创建两个光源,并使其位于不同位置,以产生不同的效果。定义:环境光,散射光,镜面光和镜面反射指数。因为没有一种光源完全由以上三种中的一种光源组成,所以任何一种光源都是由以上三种光源的光照成分组成的,即为混合光源。其成分值由RGBA定义。用材料对光的三原色的反射率来定义材料的颜色,与光源相对应,。代码如下:
void COpenGL::LightShine(void)
{
glEnable(GL_DEPTH_TEST);
//计算定点法线
glEnable(GL_AUTO_NORMAL);
glEnable(GL_NORMALIZE);
}
2.4.3 定义绘图窗口
CRect rect(7, 7, 300, 300);
2.4.4 绘制图象
void COpenGL::OnPaint()
{
}
2.4.5 结束运行
在结束运行时,我们必须将一些环境变量释放。于是应该在添加的类COpenGL的析构函数中进行操作,以释放DC和删除RC。代码如下:
COpenGL::~COpenGL()
{
wglDeleteContext(hglrc);
}
结语
利用Visual C++强大的窗口功能完成了OpenGL绘制球体的程序的编制工作,上述程序运行正常,其结果是一个动态的球体。理解了上述编程过程,就可以使我们自如地运用MFC进行其他的OpenGL编程。
- 基于MFC对话框的OpenGL三维图形开发
- 基于MFC对话框的OpenGL三维图形开发
- 基于MFC对话框的OpenGL类
- 基于MFC对话框的OpenGL类
- 基于MFC 对话框的OPENGL学习
- 基于OpenGL三维软件开发
- 直接在MFC的对话框上利用OpenGL绘制图形
- 基于MFC的对话框Dialog的OpenGL程序框架
- 制作一个基于MFC对话框的OpenGL类
- 制作一个基于MFC对话框的OpenGL类
- 制作一个基于MFC对话框的OpenGL类
- 制作一个基于MFC对话框的OpenGL类
- MFC基于对话框的用Picture Control显示OpenGL
- OpenGL: 基于OpenGL的三维机器人仿真
- OpenGL三维图形开发库 及 工具下载
- OpenGL三维图形开发库 及 工具下载
- 基于OpenGL的三维地形可视化研究
- 基于OpenGL和OpenCV的三维显示
- JPA主键生成策略 @GeneratedValue @SequenceGenerator @GenericGenerator
- java.lang.ClassNotFoundException: org.springframework.web.context.ContextLoaderServlet服务器启动报异常
- 如何在类里面引用另一个类的方法里的局部变量
- 史上最高!《速激7》首日票房近4亿超变4
- 文章标题
- 基于MFC对话框的OpenGL三维图形开发
- 描述一下 JVM 加载 class 文件的原理机制?
- 如何使用Ubuntu手机中的手势来放大或缩小图片
- 动态规划
- Activity生命周期
- LeetCode(080) Remove Duplicates from Sorted Array II (Java)
- /usr/lib/uwsgi/plugins/python_plugin.so: cannot open shared object file: No such file or directory
- 什么是 java 序列化,如何实现 java 序列化?
- JEECG第14期架构培训班开始招生啦,本周三开班!