这节主要是对我们的纹理矩形进行一下变换,例如缩放,旋转,中间需要运用到一些线性代数的东西这里就不再阐述,因为我自己也不怎么会。。。我们直接介绍代码怎么写吧。

  矩阵的相乘是从右往左读取的,这点提醒一下自己。

  

GLM

  代码中大部分的矩阵处理信息都是通过glm库来处理的,全称OPENGL MATHEMATICS ,去这里下载,把glm文件夹放到工程的include下即可。代码i引入文件库

#include <glm/glm.hpp>
#include <glm/gtc/matrix_transform.hpp>
#include <glm/gtc/type_ptr.hpp>

我们尝试一下把图案先逆时针旋转90度,然后缩放0.5倍,代码可以这么写:

glm::mat4 trans = glm:mat4(1.0f); //初始化为4*4都是1.0f的矩阵
trans = glm::rotate(trans, glm::radians(90.0f), glm::vec3(0.0, 0.0, 1.0)); //绕着z轴逆时针旋转90度
trans = glm::scale(trans, glm::vec3(0.5, 0.5, 0.5)); //缩放为0.5

此刻trans就是包含这2个变换的矩阵了,我们把他乘以顶点就可以得到变换后的矩阵

顶点着色器修改为:

#version 330 core
layout (location = 0) in vec3 aPos;
layout (location = 1) in vec2 aTexCoord;out vec2 TexCoord;uniform mat4 transform; //这里设定一个变换矩阵void main()
{gl_Position = transform * vec4(aPos, 1.0f); //实现变换TexCoord = vec2(aTexCoord.x, 1.0 - aTexCoord.y);
}

然后我们需要从代码里传入我们的变换矩阵供给着色器使用

unsigned int transformLoc = glGetUniformLocation(ourShader.ID, "transform");
glUniformMatrix4fv(transformLoc, 1, GL_FALSE, glm::value_ptr(trans)); //第一个是参数位置,第二个是矩阵数量,第三个是是否开启矩阵置换,就是行和列换过来,这里不需要。第四个是矩阵指针

这个时候,应该变换成功了。

  我们玩点花样,让图案转动起来,我们在传入旋转角度的时候加上时间变量

glm::mat4 trans;
trans = glm::translate(trans, glm::vec3(0.5f, -0.5f, 0.0f));
trans = glm::rotate(trans, (float)glfwGetTime(), glm::vec3(0.0f, 0.0f, 1.0f));

这样,就能旋转起来了,这里是先旋转,再进行位移,和我提醒的一致。

转载于:https://www.cnblogs.com/usp10/p/9290889.html

五初探opengl,变换我们的图形相关推荐

  1. Android OpenGL ES 学习(二) -- 图形渲染管线和GLSL

    OpenGL 学习教程 Android OpenGL ES 学习(一) – 基本概念 Android OpenGL ES 学习(二) – 图形渲染管线和GLSL Android OpenGL ES 学 ...

  2. Win32 OpenGL编程(4) 2D图形基础(颜色及坐标体系进阶知识)

    Win32 OpenGL 编程 (4) 2D 图形基础(颜色及坐标体系进阶知识) write by 九天雁翎 (JTianLing) -- blog.csdn.net/vagrxie 讨论新闻组及文件 ...

  3. OpenGL教程 用2D图形介绍OpenGL

    OpenGL教程 用2D图形介绍OpenGL 1.设置OpenGL 要设置OpenGL,取决于您的编程平台,请阅读: 如何在C / C ++中编写OpenGL程序. 如何在Java中编写OpenGL程 ...

  4. OpenGL 变换Transformations

    OpenGL 变换Transformations 变换Transformations简介 向量 向量与标量运算 向量取反 向量加减 长度 向量相乘 点乘 叉乘 矩阵 矩阵的加减 矩阵的数乘 矩阵相乘 ...

  5. 信号与系统——初识到理解(第五章——傅立叶变换的应用)

    目录 第五章--傅立叶变换的应用 信号与系统的时频域特性 5.1 傅立叶变换的模和相位表示 5.2 无失真传输系统(讨论连续情况,离散时足以整数约束即可) 5.3 系统相位 5.4 群时延 采样 5. ...

  6. 二维图形平移变换c语言程序,[转载]计算机图形学Opengl实现二维图形的平移、旋转、缩放复合变换...

    参考课堂教学中关于模型变化的讲解,编写对一个三角形分别实现平移.缩放.旋转等变化的源码及效果图.请以该例为蓝本,实现3题的代码编写. 如下的几幅图,第一幅就是在给出的代码部分进行修改,将GL_FLAT ...

  7. OpenGL 学习笔记III: 图形管线、三角形、shader 流水线

    跟 LearnOpenGl 也逐渐走到写 shader 渲染渐变三角形.四边形的地步了,现在总结一下整个图形管线的流程,可编程管线中各个 shader 的工作和用途.以及 shader 的本身的用途. ...

  8. 机器学习实现计算不规则图形面积_人教版小学数学五年级上册解决问题(不规则图形的面积)公开课优质课课件教案视频...

    1 小数乘法PPT课件教案下载_小学数学人教版五年级上册师梦圆​www.shimengyuan.com小数乘整数PPT课件教案下载_小学数学人教版五年级上册师梦圆​www.shimengyuan.co ...

  9. OpenGL之控制渲染图形的移动

    一.形的渲染显示 以正方形为例:正方形的绘制,与三角形的绘制类似.基于三角形的绘制,只需要将绘制三角形的部分代码修改,即可实现正方形的绘制:(三角形的绘制见上篇文章:OpenGL简单渲染一个三角形) ...

最新文章

  1. JavaEE配置工具
  2. 利用apache自带的工具 分割访问日志
  3. tushare pro接口_利用tushare获取新闻联播文字稿并制作词云
  4. 路由器配置——OSPF协议(2)
  5. 数据对拍代码 c++
  6. linux系统怎么安装python3视频教程_Linux系统,python3.7安装教程
  7. 无监督模型 训练过程_监督使用训练模型
  8. 维纳滤波和卡尔曼滤波
  9. base64原理(附代码) 换表脚本
  10. 计算机教室学生上机守则,中学计算机网络教室上机守则.doc
  11. WPF Commanding Overview 的笔记
  12. JAVA 人工神经网络实现,机器学习,人工智能
  13. DDR3 ECC 应用总结
  14. 傻瓜式搭建 hyperledger/cello
  15. oracle数据库无法查询,【案例】Oracle报错ORA-01194 ORA-01110 由于数据库SCN不一致导致无法启动...
  16. 关于嵌入式系统的应用分析
  17. 804半导体物理 中科院半导体所考研经验
  18. java经典问题国王_动态规划-国王的金矿问题java
  19. 将博客搬至CSDN_李孟_新浪博客
  20. Android实习报告

热门文章

  1. MINIGUI交叉编译【转】
  2. 船长英语题库测试软件,船长英语新题库题(资料).pdf
  3. 命令行_Laravel-admin artisan 命令行脚本使用
  4. 为什么使用GB28181而不是直接rtsp拉流
  5. 如何判断基因组的重复区域_利用宏基因组数据组装巨病毒基因组的优势与限制...
  6. 导入工程后 报错 The import javax.faces cannot be resolved 解决办法
  7. element upload预览_vue2.0 使用element-ui里的upload组件实现图片预览效果方法
  8. 【git】git compare with branch 一样的代码 但是却标识不一样 成块显示 Git 比较 不准确
  9. 80-450-024-原理-索引-索引练习
  10. 【MySQL】MySQL 如何查看sql语句执行时间和效率