You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 12:42:42