利用矩阵进行平移,旋转,缩放等图像变换、创建第二个一模一样的图像并使之进行缩放等操作

简介: 利用矩阵进行平移,旋转,缩放等图像变换、创建第二个一模一样的图像并使之进行缩放等操作
 1 将图像逆时针旋转90度,然后缩放0.5倍
 2     glm::mat4 trans;
 3 
 4     将90度装换成弧度制,绕z轴旋转,所以旋转分量放在z分量处
 5     trans = glm::rotate(trans, glm::radians(90.0f), glm::vec3(0.0, 0.0, 1.0));
 6     trans = glm::translate(trans, glm::vec3(-0.5f, -0.5f, 0.0f));
 7 
 8     trans = glm::scale(trans, glm::vec3(0.5, 0.5, 0.5));    //将变换过得的单位矩阵乘以向量vec3
 9 
10     unsigned int transformLoc = glGetUniformLocation(ourShader.ID, "transform");//获取uniform的位置
11 
12     将trans绑定到顶点着色器中的uniform,然后利用uniform实施变换
13     第一个参数是uniform的位置,第二个参数是所传矩阵的个数, 
14     第三个参数是询问我们是否需要对矩阵进行置换(行与列交换),这里是不希望,所以是GL_FALSE
15     第四个参数将trans通过glm里的value_ptr函数转化成我们需要的矩阵类型
16     glUniformMatrix4fv(transformLoc, 1, GL_FALSE, glm::value_ptr(trans));

get uniform的地址时,必须先激活项目

 1 glm::mat4 trans;
 2         //如果先旋转在平移,那么平移时会按照图像旋转后的新位置进行平移,所以最终结果有点出人意外
 3         trans = glm::rotate(trans, (float)glfwGetTime(), glm::vec3(0.0f, 0.0f, 1.0f));    //利用时间函数旋转
 4         trans = glm::translate(trans, glm::vec3(0.5f, 0.5f, 0.0f));
 5         
 6         //trans = glm::scale(trans, glm::vec3(2.0, 2.0, 2.0));
 7 
 8         //glUseProgram(shaderProgram);
 9         glUseProgram(ourShader.ID);
10 
11         unsigned int uniformLocation = glGetUniformLocation(ourShader.ID, "transform");
12         glUniformMatrix4fv(uniformLocation, 1, GL_FALSE, glm::value_ptr(trans));

创建第二个图像,移至左上角并按时间随机缩放

1 glm::mat4 trans1;
2         trans1 = glm::translate(trans1, glm::vec3(-0.5f, 0.5f, 0.0f));
3         GLfloat scaleMount = sin(glfwGetTime());
4         trans1 = glm::scale(trans1, glm::vec3(scaleMount, scaleMount, scaleMount));
5 
6         //glUseProgram(ourShader.ID);
7         glUniformMatrix4fv(uniformLocation, 1, GL_FALSE, glm::value_ptr(trans1));
8         glDrawElements(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0);
相关文章
|
4月前
|
存储 前端开发 JavaScript
canvas系列教程03 —— 线的样式、绘制文本、操作图片(图片的渲染、缩放、裁剪、切割、平铺、特效)、变换元素(平移、缩放、旋转)(一)
canvas系列教程03 —— 线的样式、绘制文本、操作图片(图片的渲染、缩放、裁剪、切割、平铺、特效)、变换元素(平移、缩放、旋转)(一)
400 0
|
4月前
|
机器学习/深度学习 前端开发 算法
canvas系列教程03 —— 线的样式、绘制文本、操作图片(图片的渲染、缩放、裁剪、切割、平铺、特效)、变换元素(平移、缩放、旋转)(二)
canvas系列教程03 —— 线的样式、绘制文本、操作图片(图片的渲染、缩放、裁剪、切割、平铺、特效)、变换元素(平移、缩放、旋转)(二)
77 0
|
6月前
|
算法 图形学
【计算机图形学】实验四 二维图形的缩放、旋转,平移,组合变换
【计算机图形学】实验四 二维图形的缩放、旋转,平移,组合变换
180 2
|
5月前
|
Web App开发 算法 Java
图像放缩之双线性内插值
图像放缩之双线性内插值
25 0
|
定位技术
任意一张图片的CGCS2000坐标配准
任意一张图片的CGCS2000坐标配准
143 0
|
数据可视化 PyTorch 算法框架/工具
数据增强之裁剪、翻转与旋转
数据增强之裁剪、翻转与旋转
145 0
数据增强之裁剪、翻转与旋转
|
图形学
Unity 之 获取物体的旋转角正确数值
不管父物体如何设置,都能获取到物体本身旋转角度的正确数值
1061 0
|
计算机视觉 Python
【39】多种方法实现矩阵的图像显示与保存
【39】多种方法实现矩阵的图像显示与保存
361 0
【39】多种方法实现矩阵的图像显示与保存
数据增强 | 旋转、平移、缩放、错切、HSV增强
数据增强 | 旋转、平移、缩放、错切、HSV增强
305 0
数据增强 | 旋转、平移、缩放、错切、HSV增强
第五周作业:利用matlab将图片依次进行,平移、镜像、旋转、0.5 倍缩小,然后分别将变换后的图像进行二维傅里叶变换。
简介:第五周作业:利用matlab将图片依次进行,平移、镜像、旋转、0.5 倍缩小,然后分别将变换后的图像进行二维傅里叶变换。
第五周作业:利用matlab将图片依次进行,平移、镜像、旋转、0.5 倍缩小,然后分别将变换后的图像进行二维傅里叶变换。