Qt下使用OpenGL(1)-根据NeHe的教程改写的
来源:互联网 发布:ipad免越狱下载软件 编辑:程序博客网 时间:2024/04/28 19:58
下面这个网址上有前辈们已经实现的一部分,但发现有些地方对Qt5以上版本的不适用,故做了些修改……有兴趣的可以先看看前辈实现的这个:
http://www.qiliang.net/old/nehe_qt/
还有这个前辈写的也不错:http://blog.csdn.net/fuyajun01/article/category/871042
话不多说,直接上代码了……
忘了说了,编译环境:win 7 32 bit, Qt 5.1.1, vs 2010
第一课:创建OpenGL窗口
nehewidget.h 头文件:
#ifndef NEHEWIDGET_H#define NEHEWIDGET_H#include <QtOpenGL/QGLWidget>//#include "ui_nehewidget.h"#include <qgl.h>class nehewidget : public QGLWidget{Q_OBJECTpublic:nehewidget(QWidget *parent = 0,bool fs=false);~nehewidget();protected:void initializeGL();void paintGL();void resizeGL(int w,int h);void keyPressEvent(QKeyEvent *e);bool fullscreen;};#endif // NEHEWIDGET_H
nehewidget.cpp 实现文件:
#include "nehewidget.h"#include <gl/GLU.h>#include <QKeyEvent>nehewidget::nehewidget(QWidget *parent,bool fs): QGLWidget(parent){fullscreen=fs;setGeometry(0,0,640,480);//setCaption("OpenGL window"); //这个函数,不支持了吧?setWindowTitle("OpenGL Window");if(fullscreen) showFullScreen();}nehewidget::~nehewidget(){}void nehewidget::initializeGL(){glShadeModel(GL_SMOOTH);glClearColor(0,0,0,0);glClearDepth(1.0);glEnable(GL_DEPTH_TEST);glDepthFunc(GL_LEQUAL);glHint(GL_PERSPECTIVE_CORRECTION_HINT,GL_NICEST);}void nehewidget::paintGL(){glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);glLoadIdentity();}void nehewidget::resizeGL(int w,int h){if(h==0) h=1;glViewport(0,0,(GLint)w,(GLint)h);glMatrixMode(GL_PROJECTION);glLoadIdentity();//下面这个函数在Qt和OpenGL新版本中都不支持了!先注释掉吧,以后不得不用时再想办法//gluPerspective(45.0,(GLfloat)w/(GLfloat)h,0.1,100.0);glMatrixMode(GL_MODELVIEW);glLoadIdentity();}void nehewidget::keyPressEvent(QKeyEvent *e){switch(e->key()) {case Qt::Key_F2:fullscreen=!fullscreen;if(fullscreen) showFullScreen();else {showNormal();setGeometry(0,0,640,480);}updateGL();break;case Qt::Key_Escape:close();}}
main 主函数:
#include "nehewidget.h"#include <QtWidgets/QApplication>#include <QMessageBox>int main(int argc, char *argv[]){bool fs=false;QApplication a(argc, argv);switch(QMessageBox::information(0,"FullScreen?","Fullscreen or not?",QMessageBox::Yes,QMessageBox::No|QMessageBox::Default)) {case QMessageBox::Yes:fs=true;break;case QMessageBox::No:fs=false;break;}nehewidget w(0,fs);w.show();return a.exec();}
0 0
- Qt下使用OpenGL(1)-根据NeHe的教程改写的
- Qt下使用OpenGL(2)-根据NeHe的教程改写的
- Qt下使用OpenGL(3)-根据NeHe的教程改写的
- Qt下使用OpenGL(5)-根据NeHe的教程改写的
- Qt下使用OpenGL(4)-根据NeHe的教程改写的
- Qt下使用OpenGL(6)-根据NeHe的教程改写的
- Qt下使用OpenGL(7)-根据NeHe的教程改写的
- Qt下使用OpenGL(8)-根据NeHe的教程改写的
- Qt下使用OpenGL(9)-根据NeHe的教程改写的
- Qt下使用OpenGL(10)-根据NeHe的教程改写的
- Qt下使用OpenGL(11)-根据NeHe的教程改写的
- Qt下使用OpenGL(16)-根据NeHe的教程改写的
- Qt下使用OpenGL(12)-根据NeHe的教程改写的
- Qt下使用OpenGL(13)-根据NeHe的教程改写的
- Qt下使用OpenGL(14)-根据NeHe的教程改写的
- Qt下使用OpenGL(15)-根据NeHe的教程改写的
- Qt下使用OpenGL(17)-根据NeHe的教程改写的
- Qt下使用OpenGL(18)-根据NeHe的教程改写的
- 笔记本进水后导致数据的丢失怎么恢复
- 再次写给我们这些浮躁的程序员(转载)
- cocos2d-x如何实现plist图集文件的调用
- js添加删除select 非form形式
- q and an
- Qt下使用OpenGL(1)-根据NeHe的教程改写的
- secureCRT中vim行号下划线问题
- bloom泛光特效
- cocos2d-x中制作动画
- js 页面关闭前的出现提示的实现代码
- 1014 Specialized Four-Dig
- 微软CRM交流年会【CRM中国论坛 http://www.crmug.cn/】
- C# Extension Method
- 【百度地图API】百度API卫星图使用方法和卫星图对比工具