我最近开始从头开始整合OpenGL ES 1.1 / 2.0 2D管道(仅限iPhone)。该管道旨在供没有3D数学经验的工程师使用。
注释掉X和Y轴旋转矩阵,它们产生它们应该的精确结果。 Z旋转矩阵似乎什么都不做。
VERTEX SHADER
//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旋转僵硬。
我也没有试图使用平截头体而不是正交并计算着色器外的矩阵。
答案 0 :(得分:1)
我遇到了同样的问题而且非常非常奇怪。我能够通过使用访问器运算符填充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;