如何使用OpenGL与GLSL旋转2D图像?已有顶点着色器中旋转变换的实现方法
如何在已有投影矩阵的顶点着色器中添加旋转效果?
你完全可以通过添加一个旋转矩阵的uniform变量来实现,而且矩阵乘法的顺序非常关键——一定要先对顶点位置应用旋转,再应用投影变换,因为矩阵乘法不满足交换律,顺序搞反会得到错误的变换结果。
具体操作可以分成这两步:
添加旋转矩阵的uniform变量
在你的顶点着色器代码里,新增一个uniform mat4 rotation变量,用来传递你已经计算好的旋转矩阵。调整矩阵乘法的顺序
修改gl_Position的计算逻辑,把原来的projection * vec4(aPos, 1.0)改成projection * rotation * vec4(aPos, 1.0)。这样顶点会先被旋转到目标位置,再通过投影矩阵转换到屏幕空间。
修改后的完整顶点着色器代码如下:
layout (location = 0) in vec3 aPos; uniform mat4 projection; uniform mat4 rotation; // 新增的旋转矩阵uniform void main(){ // 先执行旋转变换,再执行投影变换 gl_Position = projection * rotation * vec4(aPos, 1.0); }
额外提一句:如果之后你需要扩展更多变换(比如平移、缩放),通常会把旋转、缩放、平移整合到一个model矩阵里,这时变换顺序会变成projection * view * model * vec4(aPos, 1.0)(view是视图矩阵),不过就你当前的需求来说,单独添加一个旋转uniform是完全合理且高效的方案。
内容的提问来源于stack exchange,提问作者Shadoww
相关产品推荐
相关产品推荐

