OpenGL(七)——Qt 中编写OpenGL

OpenGL(七)——Qt 中编写OpenGL

一、说明

前面介绍了一些OpenGL的绘图的文章,都是在vs2010上编写的,有时候Qt项目中会用到,但是Qt自己有自己的OpenGL库。

OpenGL(二)——OpenGL基础知识点(一)

OpenGL(三)——OpenGL基础知识点二

OpenGL(四)——第一个OpenGL程序——创建一个四边形

OpenGL(五)——创建二维图形

OpenGL(六)——创建三维图形

二、Qt中使用OpenGL

在之前的文章中写了怎么在vs中去配置OpenGL,比如:

Qt + OpenGL + win10配置

是在Qt 中调用外部的dll相关的库,比如,使用glut库,配置glut库的方法。

OpenGL(一)——Win10+VS2010+OpenGL配置

是在VS2010中去配置OpenGL的方法。

三、Qt中Qt封装好的OpenGL

在Qt之前的版本中OpenGL是单独作为一个模块来使用的,在Qt Creator中工程pro文件中需要添加Qt += opengl 模块。

主要是使用两个类QGLWidget和QOpenGLWidget,QGLWidget类是用于呈现OpenGL图形的小部件。QGLWidget提供了显示集成到Qt应用程序中的OpenGL图形的功能。它很容易使用。继承它并使用子类,就像其他任何QWidget一样,额外的可以选择使用QPainter和标准OpenGL渲染命令。

从Qt5.4开始,Qt推荐使用QOpenGLWidget和QOpenGL类。
 

QGLWidget和QOpenGLWidget提供了三个方便的虚拟函数,可以在子类中重写这些函数来执行典型的OpenGL任务:

paintGL():渲染OpenGL场景。每当需要更新小部件时调用。
resizeGL ():设置OpenGL视区、投影等。每当小部件调整了大小时都会调用
该视区(并且当它第一次显示时也会调用,因为所有新创建的小部件都会自动获
得一个调整大小的事件)。
initializeGL():设置OpenGL呈现上下文,定义显示列表等。在第一次调
用resizeGL ()或paintGL ()之前调用一次。

四、示例

制作一个旋转的正方体,如下图所示,参考了NeHe的教程:

 

 具体的代码实现就是继承了QOpenGL类:

class NeHe_6_2_Widget : public QGLWidget
{
    Q_OBJECT
public:
    NeHe_6_2_Widget(QWidget *parent = 0);
    ~NeHe_6_2_Widget();

public slots:
    void slotTimer();

protected:
    void initializeGL(); //是用来初始化这个OpenGL窗口部件的,可以在里面设定一些有关选项.
    void paintGL();      //是用来绘制OpenGL的窗口了,只要有更新发生,这个函数就会被调用.
    void resizeGL( int width, int height ); //就是用来处理窗口大小变化这一事件的,width和height就是新的大小状态下的宽和高了,另外resizeGL()在处理完后会自动刷新屏幕。

    void loadGLTextures(); //在这个函数中我们会载入指定的图片并生成相应当纹理。

    GLfloat xRot, yRot, zRot ;
    GLuint texture[6];

private:
    QTimer* m_timer;
};

下一篇把这个绘制旋转正方体的代码上传。

OpenGL(八)——Qt OpenGL实现旋转的正方体

本文原创作者:冯一川(ifeng12358@163.com),未经作者授权同意,请勿转载。

  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冯一川

谢谢老板对我的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值