Qt Opengl-widget-base

Qt当前的opengl的模块封装,只需要gui,widgets两大模块。而quick中,quick模块中的QQuickItem和QQuickWindow。

本节先说widget,QOpenglWidget为我们提供显示的ui,可当传统的widget使用,需要我们处理其opengl初始化,绘制,resize,

当然也可方便使用传统widget的其他事件。

class OpenglWidget: public QOpenGLWidget, protected QOpenGLFunctions
{

public:
    OpenglWidget(QWidget *parent = nullptr);
    ~OpenglWidget();

    void initializeGL(){
        // 关键 这样就可调用opengl系列方法
        initializeOpenGLFunctions();
        // initData
        // viewMat?
    }
    void paintGL(){
        // 成员渲染
    }
    void resizeGL(int w, int h){
        // 视口
        // 投影
    }

    // 其他事件
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *e);
    void wheelEvent(QWheelEvent * event);
    void keyPressEvent(QKeyEvent *e);

.....
对于我们要渲染的item,就需要QOpenGLFunctions,保护继承即可。
class BaseRender : public QObject, protected QOpenGLFunctions
{
    Q_OBJECT
public:
    BaseRender(QObject *parent = nullptr);
    virtual ~BaseRender(){}

    virtual void render(QMatrix4x4 vpmat){Q_UNUSED(vpmat)}
private:
    virtual void initVertex(){}
    virtual void initBuffer(){}
    virtual void initShader(){}

public:
    // 顶点数据org
    QVector <QVector3D> vertexVec;
    // 顶点buffer,即VBO,EBO
    QOpenGLBuffer m_buffer;
    // 着色器程序
    QOpenGLShaderProgram *m_shaderPro;

};

 

猜你喜欢

转载自blog.csdn.net/qq_39175540/article/details/85333991