博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用矩阵进行平移,旋转,缩放等图像变换、创建第二个一模一样的图像并使之进行缩放等操作...
阅读量:7236 次
发布时间:2019-06-29

本文共 1782 字,大约阅读时间需要 5 分钟。

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_FALSE15     第四个参数将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);

 

转载于:https://www.cnblogs.com/hi3254014978/p/9581109.html

你可能感兴趣的文章
Android原理揭秘系列之一动态墙纸
查看>>
通信收发单元
查看>>
一步一步写算法(之单向链表)
查看>>
iOS中添加UITapGestureRecognizer手势识别后,UITableView的didSelectRowAtIndexPath失效
查看>>
【UVa】Partitioning by Palindromes(dp)
查看>>
UpdatePanel的用法
查看>>
eclipse 配置动态web项目在servers中运行
查看>>
__attribute__机制介绍
查看>>
怎么以最新汇率牌价计算XX美元相当于多少人民币
查看>>
读书是一种修养 ——《大河奔流的精神》(俞敏洪著)读后感
查看>>
HNU 12850 Garage
查看>>
Reverse Linked List II
查看>>
PadLeft 和 PadRight
查看>>
UIAlertView的使用方法
查看>>
第五十周五
查看>>
编程思路总结——递归
查看>>
GS与MS之间通信
查看>>
【转】如何做好移动互联网应用测试
查看>>
实变函数一窥
查看>>
Oracle免客户端InstantClient安装使用
查看>>