ubuntu+QT+ OpenGL绘图
ubuntu+QT+ OpenGL绘图QTopenGL绘图 。 ubuntu+QT+OpenGL绘图 我的开发环境是ubuntu+qt,为了要结合opencv+openni,并显示三维点云,所以在2大open环境下又考虑装一个OpenGL。具体安装方法如下: 1、 ctrl+al+t打开终端,输入sudo apt-getinstall libqglviewer-dev,进行openGL安装。 2、 打开QT,进行测试。 2.1 新建项目 openGL一般是新建Qt Gui应用项目,在类信息中继承的是Qwidght基类。这样就会生成1个头文件,2个源文件,1个界面文件。 2.2 例程 --------------------------.h----------------------------------------------- #ifndef GLWIDGET_H #define GLWIDGET_H #include <QtOpenGL> #include <QWidget> namespace Ui { class GLWidget; } class GLWidget : public QGLWidget { Q_OBJECT public: explicitGLWidget(QGLWidget *parent = 0); ~GLWidget(); protected: void initializeGL(); //初始化OpenGL窗口部件 void paintGL(); //绘制整个OpenGL窗口,只要有更新发生,这个函数就会被调用 void resizeGL(int width,int height); //处理窗口大小变化事件的,参数是新状态下的宽和高 voidkeyPressEvent(QKeyEvent *e); //鼠标处理函数 protected: bool fullscreen; //判断是否全屏的变量 private: Ui::GLWidget *ui; }; #endif // GLWIDGET_H --------------------------.h---------------------------------------- -------------------------.cpp-------------------------------------- #include "glwidget.h" #include "ui_glwidget.h" #include <QtGui> #include <QtCore> #include <QtOpenGL> GLWidget::GLWidget(QGLWidget *parent) : QGLWidget(parent), ui(new Ui::GLWidget) { ui->setupUi(this); fullscreen = false; } //这是对虚函数,这里是重写该函数 void GLWidget::initializeGL() { setGeometry(300,200,640,480);//设置窗口初始位置和大小 glShadeModel(GL_FLAT);//设置阴影平滑模式 glClearColor(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(); //renderText(10,20,"Hello,My Dear"); // glColor3f(1.0,0.0); /* glBegin(GL_TRIANGLES); glVertex3f(0.0,1.0,0.0); glVertex3f(-1.0,-1.0,0.0); glVertex3f(1.0,0.0); glEnd(); */ glBegin(GL_TRIANGLES); glColor3f(1.0f,0.0f,0.0f); glVertex3f(0.0f,1.0f,0.0f); glColor3f(0.0f,0.0f); glVertex3f(-1.0f,-1.0f,1.0f); glVertex3f(1.0f,0.0f); glEnd(); renderText(20,100,"Hello Jcy,My first OpenGL app."); } //该程序是设置opengl场景透视图,程序中至少被执行一次(程序启动时). void GLWidget::resizeGL(int width,int height) { if(0 == height) height = 1;//防止一条边为0 glViewport(0,(GLint)width,(GLint)height);//重置当前视口,本身不是重置窗口的,只不过是这里被Qt给封装好了 glMatrixMode(GL_PROJECTION);//选择投影矩阵 glLoadIdentity();//重置选择好的投影矩阵 // gluPerspective(45.0,(GLfloat)width/(GLfloat)height,0.1,100.0);//建立透视投影矩阵 // glMatirxMode(GL_MODELVIEW);//以下2句和上面出现的解释一样 glLoadIdentity(); } void GLWidget::keyPressEvent(QKeyEvent *e) { switch(e->key()) { //F1键为全屏和普通屏显示切换键 case Qt::Key_F1: fullscreen =!fullscreen; if(fullscreen) showFullScreen(); else { setGeometry(300,150,480); showNormal(); } updateGL(); break; //Ese为退出程序键 case Qt::Key_Escape: close(); } } GLWidget::~GLWidget() { delete ui; } -------------------------.cpp-------------------------------------- Main.cpp文件没任何改动。 输出是一个三角形。 3、可能出现的错误: 3.1错误:C1083: Cannot open include file: 'QtOpenGL': No such file ordirectory 如果你是这个错误,那么你需要在.pro文件中添加QT += opengl 3.2错误:C2504: 'QGLWidget' : base class undefined 如果你是这个错误,那么请你在.h文件中添加#include<QtOpenGL> 3.3错误:C2039: 'show' : is not a member of 'GLWidget' 如果你是这个错误,那么请你在.h文件中添加 #include<QtOpenGL> (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
