创建第一个OpenGL窗口
2016-03-26 17:59
344 查看
#ifndef GLWIDGET_H #define GLWIDGET_H #include <QtOpenGL/QtOpenGL> #include <QWidget> class GLWidget : public QGLWidget { Q_OBJECT public: GLWidget(QGLWidget *parent = 0); ~GLWidget(); protected: void initializeGL(); void paintGL(); void resizeGL(int width ,int height); void keyPressEvent(QKeyEvent *e); bool fullscreen; }; #endif // GLWIDGET_H
#include "glwidget.h" #include <QtOpenGL/QtOpenGL> #include <gl/glu.h> GLWidget::GLWidget(QGLWidget *parent) : QGLWidget(parent) { fullscreen = false; setWindowTitle("NeHe's OpenGL Framework"); if (fullscreen) showFullScreen(); } GLWidget::~GLWidget() { } void GLWidget::initializeGL() { glShadeModel(GL_SMOOTH); glClearColor(0.0,0.0,0.0,0.0); glClearDepth(1.0); glEnable(GL_DEPTH_TEST); glDepthFunc(GL_LEQUAL); glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST); } void GLWidget::paintGL() { glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glLoadIdentity(); // glBegin(GL_TRIANGLES);//GL_TRIANGLES代表为画三角形 // glVertex3f(0.0f, 0.0f, 0.0f);//上顶点坐标 // glVertex3f(-0.2f, -0.2f, 0.0f);//左下角坐标 // glVertex3f(0.2f, -0.2f, 0.0f);//右下角坐标 // glEnd();//结束画完 // glLoadIdentity(); } void GLWidget::resizeGL(int width, int height) { if (0 == height) { height = 1; } glViewport(0,0,(GLint)width,(GLint)height); glMatrixMode(GL_PROJECTION); glLoadIdentity(); gluPerspective(45.0,(GLfloat)width/(GLfloat)height,0.1,100); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); } void GLWidget::keyPressEvent(QKeyEvent *e) { switch(e->key()) { //F1键为全屏和普通屏显示切换键 case Qt::Key_F1: fullscreen = !fullscreen; if(fullscreen) showFullScreen(); else { showNormal(); setGeometry(0,0, 640, 480); } updateGL(); break; //Ese为退出程序键 case Qt::Key_Escape: close(); } }
参考资料: OpenGL教程
相关文章推荐
- 用十条命令在一分钟内检查 4000 Linux 服务器性能
- nginx基本操作指令
- opengl shader 绘制心形
- Linux应用层查看系统时间的方法
- POP弹性动画效果
- Linux系统——将web应用部署到tomcat服务器上
- Linux - 简介介绍
- [Linux]ubuntu更新支持
- Java笔记---CenOS下配置Java开发环境(OpenJDK+Tomcat8)
- 根据眼动追踪[Eye-Tracking]结论进行网站设计进行
- Nginx配置网站适配PC和手机
- Linux下安装RabbitMQ
- 红帽虚拟化RHEV-安装RHEV-M
- OpenCV学习- 配置
- Linux下实现秒级定时任务的两种方案(crontab 每秒运行)
- JavaWeb项目开发案例精粹-第4章博客网站系统-006View层
- 怎么让网站在浏览器网址前面显示小图标?
- Linux下非root用户如何安装软件
- JavaWeb项目开发案例精粹-第4章博客网站系统-005action层
- centos安装Django