s1.GLSL学习之建立窗口

QOpenGLWidget

  依旧从最简单的建立窗口开始。从Qt5.4开始,Qt推荐使用QOpenGLWidget,它将替代我们之前使用的QGLWidget。和QGLWidget一样,QOpenGLWidget提供了三个方便的虚函数,我们可以在子类中实现它们。
- paintGL() - 渲染OpenGL场景。每次窗口部件更新时调用。
- resizeGL() - 设置OpenGL视口、投影等。每次窗口部件尺寸发生变化时(和第一次显示时因为所有新建的窗口部件都会自动地得到resize event)调用。
- initializeGL() - 设置OpenGL资源 和状态。只调用一次,在第一次调用 resizeGL() 或paintGL()之前。

QOpenGLFunctions

  QOpenGLFunctions类提供了访问OpenGL ES 2.0的跨平台API。OpenGL 2.0 提供了OpenGL中的子类集合,可以提供跨多个平台的桌面系统以及嵌入式OpenGL的实现。然而,却很难使用子类因为子类需要解决许多平台系统的操作问题。因此 QOpenGLFunctions提供了这样的API,可以保证在所有的OpenGL系统中使用,并且也关注不同系统中的OpenGL的版本API的使用。Qt推荐直接继承的方式来使用 QOpenGLFunctions类。

示例演示

新建MyQLWidget类,继承自QOpenGLWidget和QOpenGLFunctions。

头文件myQGLWidget.h

#ifndef MY_QGLWIDGET_H
#define MY_QGLWIDGET_H

#include <QOpenGLWidget>
#include <QOpenGLFunctions>

class MyQGLWidget : public QOpenGLWidget , protected QOpenGLFunctions
{
    Q_OBJECT

public:
    MyQGLWidget(QWidget *parent = 0);

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

};
#endif

源文件myQGLWidget.cpp

#include <QtGui>
#include <QtOpenGL>
#include "myQGLWidget.h"

MyQGLWidget::MyQGLWidget(QWidget *parent)
    : QOpenGLWidget(parent)
{
}

void MyQGLWidget::initializeGL()
{
    initializeOpenGLFunctions();
    glClearColor(0.0f, 0.0f, 1.0f, 0.0f);
    glEnable(GL_DEPTH_TEST);
}

void MyQGLWidget::resizeGL(int width, int height)
{
    glViewport(0, 0, width, height);
}

void MyQGLWidget::paintGL()
{
    glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT);
    glClearColor(0.0f, 0.0f, 1.0f, 0.0f);
}

运行结果:

这里写图片描述

代码下载
OpenGL学习系列导航

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值