本篇目的是在学习着色器中uniform类型变量的传值,和QMatrix4*4矩阵的应用,掌握最基本的translate,scale,rotate矩阵操作。
(Vries的原教程地址如下,https://learnopengl-cn.github.io/01%20Getting%20started/07%20Transformations/ 关于函数的具体解析及OpenGL中的矩阵变换思想请看这个教程,本篇旨在对Vires思想做Qt平台的移植)
将上一个纹理教程的图片作移动,旋转操作,如下图所示。
在Vries教程中,实现此功能的核心代码,仅6行,生成矩阵,移动旋转矩阵。放在while循环不停更新即可。
现在让我们在Qt环境下实现这个功能,首先是对于glfwGetTime()这个函数。这个函数是在glfw.h头文件里,qt的核心模式里没有这个函数。使用Qtime类对象代替之。查阅函数解析,说明返回的是秒s,但实际应用上,感觉返回的应该是毫秒ms。
同时,qt对绘图函数paintGL()是只绘一次的,所以需在paintGL()中增添函数update(),更新绘图函数。
源代码如下,较上篇教程代码修改widget.h,widget.cpp与vertexshadersource.vert文件,修改部分见注释
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QOpenGLWidget>
#include <QDebug>
#include <QOpenGLFunctions_3_3_Core>
#include "shader.h"
#include <QOpenGLTexture>
#include <QTime> //增添头文件
class Triangle : public QOpenGLWidget
{
public:
Triangle();
GLuint a;
~Triangle();
protected:
virtual void initializeGL();
virtual void resizeGL(int w, int h);
virtual void paintGL();
private:
Shader *ourShader;