将vec2转换为另一个空间

时间:2014-05-01 13:37:44

标签: opengl math matrix glsl

在OpenGL片段着色器中,我需要将表示我需要的xy对的vec2转换为另一个坐标空间。

我为此获得了mat4转换矩阵,但可以简单地转换为:

vec2 transformed = (tansformMat4 * vec4(xy, 0.0f)).xy

我猜结果不正确,因为0会被计算到x和y部分。

1 个答案:

答案 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);