Qt5使用openGL初体验

Qt5使用openGL初体验

最近在这里一个魔方项目,用到了opengl的相关部分,好久也没有玩这个东东,所以还是写下这个过程,作为初学者还是要多动手才行。首先看一看运行的效果,这里绘画了一个三维坐标系,由x、y、z三个轴线组成。

下载地址:程序源码

在这里插入图片描述

一、下载Qt5

1.由于Qt5相比版本4有了较大的改善,所以这里选用版本是5.6.3。下载地址:http://download.qt.io/archive/qt/5.6/
在这里插入图片描述
2.选择mingw版本
在这里插入图片描述
3.这里需要注意,由于我的机子没有安装vs2013IDE,所以本文下载的是mingw版本,而且据说mingw版本对中文乱码等情况比较好处理。安装过程我就不一一打出来了,都比较简单,在此省略。。。。。。

二、搭建Qt的opengl基本框架

  1. 刚才我们刚刚安装的Qt5.6.3,我们打开Qt Creator,出来的界面是这样的。
    在这里插入图片描述
  2. 打开菜单中的《文件》->《新建文件或项目》-《Application》-《Qt Widgets Application》,点击Choose按钮
    在这里插入图片描述
  3. 选择默认路径,但是要注意,路径不能包含有中文字符,否则会报错或编译不通过,这里需要提醒一下。
    在这里插入图片描述
    继续下一步
    在这里插入图片描述
    注意圈红色部分,选择好后继续下一步。
    在这里插入图片描述
    进入工程项目界面
    在这里插入图片描述
    因为我们需要用到opengl相关的类和库,所以在第一行QT +=后面添加opengl,在最后一行添加LIBS += -lpengl32 -lglu32 -lglu。
    在这里插入图片描述
    到这里我们的项目框架基本上就建好了,下面是代码的实现部分。

三、源码部分

1. gldemo.h头文件

//gldemo.h
#ifndef GLDEMO_H
#define GLDEMO_H

#include <QWidget>
#include <QGLWidget>
//#include <QKeyEvent>

class GLDemo : public QGLWidget
{
    Q_OBJECT

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


protected:
    void initGL();
    void paintGL();
    void resizeGL(int w, int h);
    //void keyPressEvent(QKeyEvent *event);

private:
    GLfloat	x_rot;		    // X轴旋转
    GLfloat	y_rot;			// Y轴旋转
    GLfloat	z_rot;			// Z轴旋转
    GLfloat	x_speed;		// X轴旋转速度
    GLfloat y_speed;		// Y轴旋转速度
    GLfloat z_speed;		// Z轴旋转速度
    GLfloat	scr_depth;	    // 深入屏幕的距离
};
#endif // GLDEMO_H

2. 下面是gldemo.cpp源码文件

//gldemo.pp

#include "gldemo.h"
#include <GL/glu.h>


GLDemo::GLDemo(QWidget *parent)
    : QGLWidget(parent)
{
    x_rot = 15.0f;
    y_rot = 45.0f;
    z_rot = 45.0f;
    x_speed = 0.0f;
    y_speed = 0.0f;
    z_speed = 0.0f;
    scr_depth = -15.0f;
}

GLDemo::~GLDemo()
{

}


//初始化
void GLDemo::initGL()
{
    glClearColor(0.0,0.0,0.0,0.0);
    glShadeModel(GL_SMOOTH);
    glClearDepth(1.0);
    glEnable(GL_DEPTH_TEST);
}


void GLDemo::resizeGL(int w, int h)
{
    glViewport(0,0,(GLint)w,(GLint)h);
    glMatrixMode(GL_PROJECTION);
    glLoadIdentity();
    gluPerspective(45.0,(GLfloat)w/(GLfloat)h,0.1,100);
    glMatrixMode(GL_MODELVIEW);
    glLoadIdentity();
}


//绘画图形
void GLDemo::paintGL()
{
    glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
    glLoadIdentity();

    glTranslatef(-1.0f,0.0f,scr_depth);

    glLineWidth(3.0f);	//加粗画笔

    glRotatef(x_rot,1.0f,0.0f,0.0f);    //绕X轴旋转
    glRotatef(y_rot,0.0f,1.0f,0.0f);    //绕Y轴旋转
    glRotatef(z_rot,0.0f,0.0f,1.0f);    //绕Z轴旋转

    glBegin(GL_LINES);

    // X轴线
    glColor3f(0.0f,1.0f,0.0f);
    glVertex3f(0.0f,0.0f,0.0f);
    glColor3f(0.0f,1.0f,0.0f);
    glVertex3f(6.0f,0.0f,0.0f);

    // Y轴线
    glColor3f(1.0f,0.0f,0.0f);
    glVertex3f(0.0f,0.0f,0.0f);
    glColor3f(1.0f,0.0f,0.0f);
    glVertex3f(0.0f,6.0f,0.0f);

    // Z轴线
    glColor3f(0.0f,0.0f,1.0f);
    glVertex3f(0.0f,0.0f,0.0f);
    glColor3f(0.0f,0.0f,1.0f);
    glVertex3f(0.0f,0.0f,6.0f);

    glEnd();
}

3. main函数主文件

//main.cpp

//main.cpp
#include "gldemo.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    GLDemo w;
    w.show();

    return a.exec();
}

以上就是初步体验,若有不足之处请大家帮我指正一下。在此过程中参考了https://blog.csdn.net/qq78442761/article/details/81221616和https://blog.csdn.net/gaobobo138968/article/details/80468843两位博主代码,在此感谢,下一步有时间开始做坐标轴旋转,会用到键盘事件。

  • 2
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值