计算机图形学-在VS2013下利用MFC实现OpenGL
来源:互联网 发布:c读取excel单元格数据 编辑:程序博客网 时间:2024/06/08 16:01
一直想系统的学习MFC,感觉网上的关于这方面的好杂好乱,好多都看不懂(可能由于太菜233.)
看了几位大神的博客,终于明白了点,记录一下自己的学习过程吧
一、新建项目
二、选择多文档,MFC标准,点击完成
三、运行结果
四、导入必要的文件
1. 在<stdafx.h >里面加入一些常用的头文件
#include <gl/gl.h>#include <gl/glu.h>#include <gl/glut.h>#include <stdio.h>#include <math.h>
2.在项目中加入OpenGL的lib库
选中项目,鼠标右键点击
选中属性,找到配置属性/链接器/输入/附加依赖项
写入需要使用的lib文件
四、在程序里面添加函数和变量
<1>在---View.h里面添加变量
private: HGLRC m_hRC; CClientDC* m_pDC;
<2>在--View.cpp里面添加自定义函数bSetDCPixelFormat(),用于设置像素格式
bool CStudy01View::bSetDCPixelFormat(){ static PIXELFORMATDESCRIPTOR pfd = { sizeof(PIXELFORMATDESCRIPTOR), // 结构的大小 1, // 结构的版本 PFD_DRAW_TO_WINDOW | // 在窗口(而不是位图)中绘图 PFD_SUPPORT_OPENGL | // 支持在窗口中进行OpenGL调用 PFD_DOUBLEBUFFER, // 双缓冲模式 PFD_TYPE_RGBA, // RGBA颜色模式 32, // 需要32位颜色 0, 0, 0, 0, 0, 0, // 不用于选择模式 0, 0, // 不用于选择模式 0, 0, 0, 0, 0, // 不用于选择模式 16, // 深度缓冲区的大小 0, // 在此不使用 0, // 在此不使用 0, // 在此不使用 0, // 在此不使用 0, 0, 0 // 在此不使用 }; // 选择一种与pfd所描述的最匹配的像素格式 // 为设备环境设置像素格式 int pixelformat; pixelformat = ChoosePixelFormat(m_pDC->GetSafeHdc(), &pfd); if (0 == pixelformat) return false; // 为设备环境设置像素格式 return SetPixelFormat(m_pDC->GetSafeHdc(), pixelformat, &pfd); return FALSE;// } }
3)在View.cpp里面添加OnCreate()函数,创建窗口时调用
int CStudy01View::OnCreate(LPCREATESTRUCT lpCreateStruct){ if (CView::OnCreate(lpCreateStruct) == -1) return -1; // TODO: 在此添加您专用的创建代码 // 创建DC m_pDC = new CClientDC(this); ASSERT(m_pDC != NULL); // 选择像素格式 if (!bSetDCPixelFormat()) return -1; // 创建渲染环境, 并使它成为当前渲染环境 m_hRC = wglCreateContext(m_pDC->GetSafeHdc()); wglMakeCurrent(m_pDC->GetSafeHdc(), m_hRC); return 0;}
(4)添加OnDestroy() 函数,同OnCreate函数的添加过程
void CStudy01View::OnDestroy(){ CView::OnDestroy(); // TODO: 在此处添加消息处理程序代码 wglMakeCurrent(NULL, NULL); wglDeleteContext(m_hRC); delete m_pDC;}
(5)修改OnDraw()函数,画图时调用该函数
void CStudyView::OnDraw(CDC* /*pDC*/){ CStudyDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); if (!pDoc) return; // TODO: 在此处为本机数据添加绘制代码 // 清除颜色 glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); // 绘制场景 glMatrixMode(GL_MODELVIEW); glPushMatrix(); DrawPicture(); //为了更加明了,DrawPicture函数就是绘图的核心代码 glPopMatrix(); // 交换缓冲区 SwapBuffers(wglGetCurrentDC());}
(6)添加绘图自定义函数DrawPicture(),就是OpenGL里面的Display()函数
(7)添加函数OnInitialUpdate(),类似于OpenGL里面的OnInit()函数
void CStudy01View::OnInitialUpdate(){ CView::OnInitialUpdate(); // TODO: 在此添加专用代码和/或调用基类 glClearColor(1, 1, 1, 1);}
(8)添加OnSize()函数,类似于OpenGL里面的Reshape()函数
void CStudy01View::OnSize(UINT nType, int cx, int cy){ CView::OnSize(nType, cx, cy); // TODO: 在此处添加消息处理程序代码 glViewport(0, 0, cx, cy); // 设置投影矩阵(透视投影) glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(60.0, (GLfloat)cx / (GLfloat)cy, 1.0, 1000.0); // 设置模型视图矩阵 glMatrixMode(GL_MODELVIEW); glLoadIdentity(); gluLookAt(0.0, 0.0, 2.0, 0.0, 0.0, 0.0, 0.0, 1.0, 0.0); // 显示三维图形的程序 /*glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0f, (GLfloat)width / (GLfloat)height, 0.1f, 100.0f); glMatrixMode(GL_MODELVIEW); glLoadIdentity();*/}
五
把定义的类和方法写入---View.h头文件里面,方便调用
到此,基本工作就OK了。
阅读全文
0 0
- 计算机图形学-在VS2013下利用MFC实现OpenGL
- 计算机图形学——MFC和OpenGL两种方法实现光照模型
- 《计算机图形学》实验一:利用OpenGL实现直线光栅化的DDA算法
- OpenGL的计算机图形学
- 计算机图形学 OPENGL学习
- OPENGL-学习计算机图形学
- [OpenGL] 初识OpenGL,计算机图形学
- 在Visual Studio 2013下利用MFC框架配置OpenGL
- 计算机图形学Opengl实现二维图形的…
- 计算机图形学Opengl实现二维图形的…
- 计算机图形学02一一OpenGL 代码实现绘制一条线
- 计算机图形学实验教程(OpenGL)
- 学习计算机图形学OpenGL绘图
- 计算机图形学-OpenGL-绘制五角星
- 计算机图形学MFC画圆zz
- MFC计算机图形学(1)
- MFC计算机图形学(2)
- MFC计算机图形学(3)
- 多线程并行数组求和(相邻配对模式)
- 吴恩达机器学习之最优间隔分类器
- 372. Super Pow
- storm程序-单词统计wordcount
- 解决nbconvert failed: Pandoc wasn’t found. Please check that pandoc is installed:
- 计算机图形学-在VS2013下利用MFC实现OpenGL
- linux进程间通信--消息队列相关函数(ftok)详解
- 从零开始 OpenCV (二) —— OpenCV 的基本数据类型和基本函数
- dataframe写入postgresql数据库中
- com.mchange.v2.resourcepool.ResourcePoolException: Attempted to use a closed or broken resource pool
- STL容器
- Tomcat服务器允许所有JSON进行跨域请求(不使用JSONP)
- Mysql连接查询时索引失效,字符集问题
- 计算机图形学-MFC图形界面优化