gpt4 book ai didi

matrix - 在着色器中的二维图像矩阵上旋转 Z 轴

转载 作者:行者123 更新时间:2023-12-04 17:46:44 25 4
gpt4 key购买 nike

我正在尝试在顶点着色器中旋转二维图像的矩阵。

enter image description here

我希望二维图像围绕我认为的 z 轴旋转。

但是我得到的关闭是:

enter image description here

这是我在着色器中应用平移和缩放的矩阵:

mat4 worldPosTrans = mat4(vec4(scale.x * cos(rotateZ), 0, 0, 0),
vec4(0, scale.y, 0, 0),
vec4(0, 0, scale.z, 0),
vec4(translation, 1));

这是一个稍微改变的版本,它应该旋转所有东西:

mat4 worldPosTrans = mat4(vec4(scale.x * cos(rotateZ), -sin(rotateZ), 0, 0),
vec4(sin(rotateZ), scale.y * cos(rotateZ), 0, 0),
vec4(0, 0, scale.z, 0),
vec4(translation, 1));

这是我的完整顶点着色器:

precision mediump float;

attribute vec3 vertPosition;
attribute vec3 vertColor;
attribute vec2 aTextureCoord;
varying vec3 fragColor;
varying highp vec2 vTextureCoord;

varying highp vec2 vTextureCoordBg;
uniform vec2 uvOffsetBg;
uniform vec2 uvScaleBg;

uniform mat4 uPMatrix;
uniform mat4 uMVMatrix;

uniform vec2 uvOffset;
uniform vec2 uvScale;

uniform vec3 translation;
uniform vec3 scale;
uniform float rotateZ;

void main()
{
fragColor = vertColor;

vTextureCoord = (vec4(aTextureCoord, 0, 1)).xy * uvScale + uvOffset;
vTextureCoordBg = (vec4(aTextureCoord, 0, 1)).xy * uvScaleBg + uvOffsetBg;

mat4 worldPosTrans = mat4(
vec4(scale.x * cos(rotateZ), 0, 0, 0),
vec4(0, scale.y, 0, 0),
vec4(0, 0, scale.z, 0),
vec4(translation, 1));

gl_Position = (uPMatrix * worldPosTrans) * vec4(vertPosition.x, vertPosition.y, vertPosition.z, 1.0);
}

编辑:

Rabbid76 在评论中解决了我的问题。

最佳答案

GLSL 中的 4*4 转换矩阵如下所示:

mat4 m44 = mat4(
vec4( Xx, Xy, Xz, 0.0),
vec4( Yx, Xy, Yz, 0.0),
vec4( Zx Zy Zz, 0.0),
vec4( Tx, Ty, Tz, 1.0) );

一般来说,围绕 Z 轴的旋转矩阵是这样设置的:

float angle;
mat4 rotation = mat4(
vec4( cos(angle), -sin(angle), 0.0, 0.0 ),
vec4( sin(angle), cos(angle), 0.0, 0.0 ),
vec4( 0.0, 0.0, 1.0, 0.0 ),
vec4( 0.0, 0.0, 0.0, 1.0 ) );

另见 Rotation matrix


这意味着您必须像这样设置 worldPosTrans 矩阵:

mat4 worldPosTrans = mat4( 
vec4( scale.x * cos(rotateZ), scale.x * -sin(rotateZ), 0.0, 0.0),
vec4( scale.y * sin(rotateZ), scale.y * cos(rotateZ), 0.0, 0.0),
vec4( 0.0, 0.0, scale.z, 0.0),
vec4( translation.xyz, 1.0)
);

关于matrix - 在着色器中的二维图像矩阵上旋转 Z 轴,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48141827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com