ubuntu+QT+ OpenGL绘图

来源:互联网 发布:赫苏斯 数据 编辑:程序博客网 时间:2024/05/17 02:48

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.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,0.0);

    /*

    glBegin(GL_TRIANGLES);

        glVertex3f(0.0, 1.0,0.0);

        glVertex3f(-1.0, -1.0,0.0);

        glVertex3f(1.0, -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, 1.0f,0.0f);

            glVertex3f(-1.0f,-1.0f, 0.0f);

        glColor3f(0.0f, 0.0f,1.0f);

            glVertex3f(1.0f,-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, 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, 640, 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>

 

0 0
原创粉丝点击