Qt Opengl-widget-base
阿新 • • 發佈:2019-01-11
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; };