QT开发OpenGL程序框架

1.开发平台:Win7系统,Qt Creator5.7.0社区版;

2.环境配置:

1).下载OpenGL开发库;

2)  .分别将OpenGL开发库中的.h文件(如glut.h)拷贝至QT的安装路径\...\include\QtOpenGL\目录下;

3) .分别将OpenGL开发库中的.lib文件(如glut.lib,glut32.lib)拷贝至QT的安装路径\...\lib\目录下;

4) .分别将OpenGL开发库中的.dll文件(如glut.dll,glut32.dll)拷贝至QT的安装路径\...\bin\目录下;

3.创建Qt Widget Application项目FrameWork,基类为QGLWidget,FrameWork.h文件如下所示:

#ifndef FRAMEWORK_H
#define FRAMEWORK_H

#include <QWidget>
#include <QGLWidget>
#include <QtOpenGL>

class FrameWork : public QGLWidget
{
    Q_OBJECT

public:
    FrameWork(QWidget *parent = 0);
    ~FrameWork();

protected:
    void initializeGL()    Q_DECL_OVERRIDE;
    void resizeGL(int width,int height) Q_DECL_OVERRIDE;
    void paintGL()  Q_DECL_OVERRIDE;

private:
    void draw();
};

#endif // FRAMEWORK_H

4.完成FrameWork.cpp中的成员函数定义,如下所示:

#include "framework.h"

FrameWork::FrameWork(QWidget *parent)
    : QGLWidget(parent)
{
    //指定OpenGL的显示描述表
    setFormat(QGLFormat(QGL::DoubleBuffer | QGL::DepthBuffer));
}

FrameWork::~FrameWork()
{

}

void FrameWork::initializeGL()
{
    //qglClearColor(Qt::black);
    glClearColor(0.1f,0.1f,0.2f,1.0f);  //颜色的不同表达方式
    glShadeModel(GL_FLAT);
    glEnable(GL_DEPTH_TEST);
    glEnable(GL_CULL_FACE);
}

void FrameWork::resizeGL(int width, int height)
{
    glViewport(0,0,width,height);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    GLfloat x = GLfloat(width)/height;
    glFrustum(-x,+x,-1.0,+1.0,4.0,15.0);
    glMatrixMode(GL_MODELVIEW);
}

void FrameWork::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
    draw();
}

void FrameWork::draw()
{
    static const GLfloat P1[3] = {0.0,-1.0,+2.0};
    static const GLfloat P2[3] = {+1.73205081,-1.0,-1.0};
    static const GLfloat P3[3] = {-1.73205081,-1.0,+2.0};
    static const GLfloat P4[3] = {0.0,+2.0,0.0};
    static const GLfloat *const coords[4][3]={
        {P1,P2,P3},{P1,P3,P4},{P1,P4,P2},{P2,P4,P3}
    };
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
    glTranslatef(0.0,0.0,-10.0);
    for(int i=0;i<4;++i)
    {
        glBegin(GL_TRIANGLES);
        qglColor(Qt::red);
        for(int j=0;j<3;++j)
        {
            glVertex3f(coords[i][j][0],coords[i][j][1],coords[i][j][2]);
        }
        glEnd();
    }
}

5.在项目文件FrameWork.pro文件中添加包含的库,如下所示:

QT      += opengl
LIBS    = -lopengl32 -lglu32 -lglut

6.编译项目,运行结果如下所示:




 

猜你喜欢

转载自blog.csdn.net/u013232740/article/details/68518734
今日推荐