在OpenGL片段着色器中,我需要将表示我需要的xy对的vec2转换为另一个坐标空间。
我为此获得了mat4转换矩阵,但可以简单地转换为:
vec2 transformed = (tansformMat4 * vec4(xy, 0.0f)).xy
?
我猜结果不正确,因为0会被计算到x和y部分。
答案 0 :(得分:2)
4D矢量和矩阵用于3D仿射变换。
您可以使用等效的2D仿射变换,它是一个三维矢量,z值为1(然后丢弃):
vec3 transformed3d = transformMat3 * vec3(x, y, 1.0);
vec2 transformed2d(transformed3d.x, transformed3d.y);
或者,您也可以使用前面提到的3D仿射变换和4D矢量和矩阵,将z值设置为零,将均值坐标的w值设置为1,然后直接使用x和y值平行投影:
vec4 transformed4d = transformMat4 * vec3(x, y, 0.0, 1.0);
vec2 transformed2d(transformed4d.x, transformed4d.y);