gpt4 book ai didi

iphone - glsl 着色器中 Z 轴旋转矩阵的问题

转载 作者:行者123 更新时间:2023-12-03 21:19:17 24 4
gpt4 key购买 nike

我最近开始从头开始构建 OpenGL ES 1.1/2.0 2D 管道(仅限 iPhone)。该管道旨在供没有 3D 数学经验的工程师使用。

注释掉的是 X 和 Y 轴旋转矩阵,它们可以产生应有的精确结果。 Z 旋转矩阵似乎没有任何作用。

顶点着色器

//THESE WORK
/*
highp mat4 rotationMatrix = mat4(1.0, 0.0, 0.0, 0.0,
0.0, cos(angle), -sin(angle), 0.0,
0.0, sin(angle), cos(angle), 0.0,
0.0, 0.0, 0.0, 1.0);

highp mat4 rotationMatrix = mat4(cos(angle), 0.0, sin(angle), 0.0,
0.0, 1.0, 0.0, 0.0,
-sin(angle), 0.0, cos(angle), 0.0,
0.0, 0.0, 0.0, 1.0);
*/

//THIS DOESN'T WORK >:(
highp mat4 rotationMatrix = mat4(cos(angle), -sin(angle), 0.0, 0.0,
sin(angle), cos(angle), 0.0, 0.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0);

gl_Position = a_position;
gl_Position *= rotationMatrix;

由于这将用于 2D 渲染并交给没有 3D 经验的工程师,因此我宁愿不传入 MVP 矩阵,而只推送基本的缩放、旋转和平移变量(并跳过为以下内容编写部分矩阵库)第10次)。

我已经有一段时间没有纠结于矩阵数学和着色器了,所以我希望这是一个小错误。

感谢您的帮助!

编辑/更新:

我发现后处理过程破坏了角度。

我现在发现 Z 轴旋转似乎可以缩放四边形。我记得这是一个n00b问题并且正在调查它......

我忘了提及我有一个便宜的临时投影矩阵

//s_scalefactor is for retina vs non-retina display

highp mat4 projectionMatrix = mat4( 2.0/(320.0 * s_scalefactor), 0.0, 0.0, -1.0,
0.0, 2.0/(480.0 * s_scalefactor), 0.0, -1.0,
0.0, 0.0, 1.0, 0.0,
0.0, 0.0, 0.0, 1.0);

gl_Position *= projectionMatrix;

这是一种廉价的黑客手段,但我不确定它会僵化 Z 轴旋转。

编辑#2:

尝试使用平截头体代替正交并在着色器外部计算矩阵时,我也一无所获。

最佳答案

我也遇到了同样的问题,而且非常非常奇怪。我能够通过使用访问器运算符(而不是使用构造函数)填充 mat4 结构来解决此问题:

mat4 rotateZ;
rotateZ[0].x = cosAngle;
rotateZ[0].y = negSinAngle;
rotateZ[0].z = 0.0;
rotateZ[0].w = 0.0;
rotateZ[1].x = sinAngle;
rotateZ[1].y = cosAngle;
rotateZ[1].z = 0.0;
rotateZ[1].w = 0.0;
rotateZ[2].x = 0.0;
rotateZ[2].y = 0.0;
rotateZ[2].z = 1.0;
rotateZ[2].w = 0.0;
rotateZ[3].x = 0.0;
rotateZ[3].y = 0.0;
rotateZ[3].z = 0.0;
rotateZ[3].w = 1.0;

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

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