目录
1、设置颜色
添加QColor变量,如果需要颜色随时间变化,那就再添加一个定时器QElapsedTimer以及重写虚函数timerEvent。
initializeGL()函数设置片段着色器中颜色变量

如果需要设置时间别忘了开启计时器

timerEvent函数里写颜色随时间的变化,然后调用update刷新,会触发paintGL。

paintGL函数中给片段着色器赋值,让重新设置颜色。

具体代码
#ifndef OPENGLWIDGET_H
#define OPENGLWIDGET_H
#include <QOpenGLWidget>
#include <QOpenGLShaderProgram>
#include <QOpenGLBuffer>
#include <QOpenGLVertexArrayObject>
#include <QOpenGLTexture>
#include <QElapsedTimer>
QT_BEGIN_NAMESPACE
namespace Ui { class openGLWidget; }
QT_END_NAMESPACE
class openGLWidget : public QOpenGLWidget
{
Q_OBJECT
public:
openGLWidget(QWidget *parent = nullptr);
~openGLWidget();
protected:
virtual void timerEvent(QTimerEvent *event) override;
virtual void initializeGL() override;
virtual void resizeGL(int w, int h) override;
virtual void paintGL() override;
private:
QOpenGLShaderProgram shaderProgram;
QOpenGLBuffer vbo;
QOpenGLBuffer ebo {QOpenGLBuffer(QOpenGLBuffer::IndexBuffer)};
QOpenGLVertexArrayObject vao;
QColor color;
QElapsedTimer time;
private:
Ui::openGLWidget *ui;
};
#endif // OPENGLWIDGET_H
#include "openGLWidget.h"
#include "./ui_openGLWidget.h"
#include <QOpenGLFunctions>
#include <QtMath>
openGLWidget::openGLWidget(QWidget *parent)
: QOpenGLWidget(parent)
, ui(new Ui::openGLWidget)
{
ui->setupUi(this);
}
openGLWidget::~openGLWidget()
{
makeCurrent();
vao.destroy();
vbo.destroy();
ebo.destroy();
doneCurrent();
delete

这篇博客主要介绍了OpenGL中如何设置颜色和纹理。在设置颜色部分,通过使用QColor变量并结合QElapsedTimer定时器,实现了颜色随时间变化的效果。在paintGL和initializeGL函数中对片段着色器进行操作,实现颜色更新。对于纹理设置,博客讲解了如何使用QOpenGLTexture类加载和应用纹理,并在顶点数据中包含纹理坐标,以在paintGL函数中更新着色器的纹理值。
最低0.47元/天 解锁文章
770

被折叠的 条评论
为什么被折叠?



