1.OpenGL学习之建立窗口
来源:互联网 发布:工行个人网络抵押贷款 编辑:程序博客网 时间:2024/06/08 19:41
使用OpenGL绘图
OpenGL是绘制三维图形的标准API。从Qt5开始,OpenGL不再是单独模块,而作为Qt GUI核心的一部分。OpenGL本身只提供平台无关的画图功能,而不包含特定平台的窗口处理功能。QGLWidget类可以通过对它的子类化,并使用OpenGL命令开发自己的窗口部件。
建立OpenGL窗口
QGLWidget类提供了三个方便的纯虚函数,可以在子类中重新实现来绘制三维图形。它们分别是:
- initializeGL():在调用paintGL()之前只被调用一次。可以在函数里设置OpenGL的绘图描述表,定义显示列表,以及执行其他的初始化。
- resizeGL():应在第一次调用paintGL()之前,但在initializeGL()之后调用resizeGL()函数。在窗口部件改变大小时也将调用resizeGL()函数。在函数里可以设置OpenGL视口,投影以及其他与窗口部件尺寸相关的设置。
paintGL():在窗口部件需要重绘时调用。它与QWidget::paintEvent()类似。
MyQGLWidget 从QGLWidget类派生而来。initializeGL(),resizeGL(),paintGL()这三个函数是在QGLWidget中实现的。鼠标事件处理在QWidget中实现。头文件如下:
#ifndef MY_QGLWIDGET_H#define MY_QGLWIDGET_H#include <QGLWidget>class MyQGLWidget : public QGLWidget{ Q_OBJECTpublic: MyQGLWidget(QWidget *parent = 0);protected: void initializeGL(); void resizeGL(int width, int height); void paintGL();private:};#endif
initializeGL()函数
void MyQGLWidget::initializeGL(){ qglClearColor(Qt::blue); //设置清除屏幕所用的颜色 //glClearColor(1.0f, 0.0f, 0.0f, 0.0f); glShadeModel(GL_FLAT); glEnable(GL_DEPTH_TEST); // 启用深度测试 glEnable(GL_CULL_FACE); // 所作深度测试的类型}
initializeGL()函数在调用paintGL()之前只被调用一次。可以在该函数里设置OpenGL的绘图描述表,定义显示列表,以及执行其他的初始化。上面的代码都是标准的OpenGL,除了对QGLWidget的qglClearColor()函数的调用。如果想坚持使用标准的OpenGL,则可以在RGBA模式下调用glClearColor(),而在颜色索引模式下调用glClearIndex()。
resizeGL()函数
void MyQGLWidget::resizeGL(int width, int height){ glViewport(0, 0, width, height); glMatrixMode(GL_PROJECTION); //选择投影矩阵 glLoadIdentity(); //重置投影矩阵 GLfloat x = GLfloat(width) / height; glFrustum(-x, +x, -1.0, +1.0, 4.0, 15.0); glMatrixMode(GL_MODELVIEW); // 选择模型观察矩阵}
应该在第一次调用paintGL()之前,但在initializeGL()之后调用resizeGL()函数。在窗口部件改变大小时也将调用resizeGL()函数。在该函数里可以设置OpenGL视口、投影以及其他与窗口部件尺寸相关的设置。
paintGL()函数
void MyQGLWidget::paintGL(){ glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); //重置当前的模型观察矩阵}
在窗口窗口部件需要重绘时调用paintGL()函数。它与QWidget::paintEvent()类似,使用OpenGL函数替代QPaint函数。
运行结果:
代码下载
OpenGL学习系列导航
- 1.OpenGL学习之建立窗口
- OpenGL学习笔记之创建窗口
- opengl win32窗口的建立
- 《高效学习OpenGL》之 openGL设置窗口像素格式
- qt opengl lesson1 建立一个opengl窗口
- OpenGl学习笔记1——建立一个可以支持OpenGL的窗口
- OpenGL之坐标系建立
- OpenGL之坐标系建立
- 《高效学习OpenGL》之清除窗口 glClearColor()与glClear()
- OpenGl学习之显示窗口重定形函数
- OpenGL_Qt学习笔记之_01(创建一个OpenGL窗口)
- OpenGL_Qt学习笔记之_01(创建一个OpenGL窗口)
- OpenGL_Qt学习笔记之_01(创建一个OpenGL窗口)
- OpenGL_Qt学习笔记之_01(创建一个OpenGL窗口)
- vc学习笔记之建立一个新的窗口
- 学习OpenGL系列一 窗口
- MFC学习第一节:建立窗口
- [OpenGL] 基于win32api建立多窗口GL应用程序
- 选择排序-冒泡排序
- github无法提交的问题
- JAVA中使用FTPClient实现FTP上文件的操作
- java常用集合
- 关于工作安排
- 1.OpenGL学习之建立窗口
- 离线安装Chrome Postman 和Postman Interceptor 插件
- 带你通俗易懂的理解——线程、多线程与线程池
- Spark性能优化:开发调优篇
- 抽象类和接口之间的区别
- Dijkstra算法解惑【持续更新中】
- adb 挂载分区
- Python编写ORM框架
- 深入理解 JavaScript 异步系列(1)——基础