环境: QT 5.12.8
本人初学Opengl,想要绘制一个正方形并且贴纹理,以下是参考别人代码自己整理的。
- 创建QT工程,结构如下:
- 代码如下:
“glwidget.h”
#ifndef GLWIDGET_H
#define GLWIDGET_H
#include <QWidget>
#include <QOpenGLWidget>
#include <QOpenGLFunctions>
#include <QOpenGLShader>
#include <QOpenGLShaderProgram>
#include <QOpenGLTexture>
#include <QOpenGLBuffer>
#include <QOpenGLVertexArrayObject>
class GLWidget : public QOpenGLWidget,protected QOpenGLFunctions
{
Q_OBJECT
public:
GLWidget(QWidget *parent = nullptr);
~GLWidget();
private:
void createTexture();
void createShaderProgram();
void setMatrix();
QOpenGLTexture *m_texture;
QOpenGLShaderProgram *m_program;
QOpenGLVertexArrayObject vao;
QOpenGLBuffer vbo;
QOpenGLBuffer ebo;
//位置
GLuint m_posAttr;
//颜色
GLuint m_colAttr;
//纹理
GLuint m_texcoordLocation;
//矩阵
GLuint m_projection;
GLuint m_view;
GLuint m_model;
protected:
void initializeGL() override;
void resizeGL(int w, int h) override;
void paintGL() override;
};
#endif // GLWIDGET_H
“glwidget.cpp”
#include "glwidget.h"
GLfloat vertices[ ] = {
0.5f, 0.5f, 0.0f, 1.0f, 0.0f, 0.0f, 1.0f, 1.0f, // Top Right
0.5f, -0.5f, 0.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, // Bottom Right
-0.5f, -0.5f, 0.0f, 0.0f, 0.0f, 1.0f, 0.0f, 0.0f, // Bottom Left
-0.5f, 0.5f