Qt中创建OpenGL基本框架

来源:互联网 发布:网络服务商 编辑:程序博客网 时间:2024/06/05 05:04

1、创建Qt设计界面类
Qt Widget

2、在.pro文件中加入opengl,以及加入需要用到的Libs

QT       += core gui openglLIBS     += -lglut -lglu32 -lopengl32

.pro截图

3、修改Widget的父类继承QGLWidget,并导入QGLWidget虚函数initializeGL( )、resizeGL( )、paintGL( )。如有需要其它函数根据实际情况继续导入。

widget.h代码如下:

#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <QtOpenGL/QGLWidget>namespace Ui {class Widget;}class Widget : public QGLWidget{    Q_OBJECTpublic:    explicit Widget(QGLWidget *parent = 0);    ~Widget();private:    Ui::Widget *ui;    // QGLWidget interfaceprotected:    void initializeGL();    void resizeGL(int w, int h);    void paintGL();};#endif // WIDGET_H

4、在.cpp文件中实现虚函数

widget.cpp文件如下:

#include "widget.h"#include "ui_widget.h"#include "gl/glu.h"                         //gluPerspective()函数需要用到此头文件Widget::Widget(QGLWidget *parent) :    QGLWidget(parent),    ui(new Ui::Widget){    ui->setupUi(this);}Widget::~Widget(){    delete ui;}void Widget::initializeGL(){    setGeometry(300, 150, 640, 480);        //设置窗口初始位置和大小    glShadeModel(GL_SMOOTH);                //设置阴影平滑模式    glClearColor(1.0, 1.0, 1.0, 0);         //改变窗口的背景颜色,不过我这里貌似设置后并没有什么效果    glClearDepth(1.0);                      //设置深度缓存    glEnable(GL_DEPTH_TEST);                //允许深度测试    glDepthFunc(GL_LEQUAL);                 //设置深度测试类型    glHint(GL_PERSPECTIVE_CORRECTION_HINT,           GL_NICEST);                      //进行透视校正    glEnable(GL_BLEND);                     //打开混合    glBlendFunc(GL_SRC_ALPHA,                GL_ONE_MINUS_SRC_ALPHA);    //设置颜色混合,用于透明}void Widget::resizeGL(int w, int h){    if(0 == h)        h = 1;                              //防止一条边为0    glViewport(0, 0, (GLint)w, (GLint)h);   //重置当前视口,本身不是重置窗口的,只不过是这里被Qt给封装好了    glMatrixMode(GL_PROJECTION);            //选择投影矩阵    glLoadIdentity();                       //重置选择好的投影矩阵    gluPerspective(45.0, (GLfloat)w/(GLfloat)h                   , 0, 1000.0f);           //建立透视投影矩阵    glMatrixMode(GL_MODELVIEW);             //以下2句和上面出现的解释一样    glLoadIdentity();}void Widget::paintGL(){    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);    glLoadIdentity();    glTranslated(0,0,-5);                   //视角后移,不然看不到绘制的图形    glColor3f(0,0,0);                       //选取颜色为黑色    glBegin(GL_TRIANGLES);                  //绘制一个简单的三角形    glVertex2d(0,0);    glVertex2d(1,1);    glVertex2d(1,0);    glEnd();}

绘制结果:
简单的OpenGL界面截图

至此,简单的OpenGL框架就搭好了,关于OpenGL的相关知识请自行百度“NeHe”学习。

0 0
原创粉丝点击