基于Qt的OpenGL编程(3.x以上GLSL可编程管线版)---(五)变换

本文介绍如何在Qt框架下利用OpenGL的GLSL着色器进行图像的平移、缩放和旋转操作。通过学习uniform变量传递和QMatrix4x4矩阵的应用,实现对纹理图像的动态变换。教程基于Vries的OpenGL教程进行Qt平台的移植,讨论了Qt中QTime替代glfwGetTime()以及如何在paintGL()函数中实现连续更新。
摘要由CSDN通过智能技术生成

本篇目的是在学习着色器中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;
   
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值