Opengl 如何在z=0平面中将二维变换矩阵(对于齐次坐标)转换为三维?

Opengl 如何在z=0平面中将二维变换矩阵(对于齐次坐标)转换为三维?,opengl,matrix,coordinates,coordinate-transformation,homogenous-transformation,Opengl,Matrix,Coordinates,Coordinate Transformation,Homogenous Transformation,我有一个二维齐次坐标的3x3变换矩阵: a b c d e f g h i 我想在2D应用程序中(使用glMultMatrix)将其传递给OpenGL,但OpenGL采用4x4矩阵表示3D齐次坐标。我希望通过4x4矩阵转换的所有坐标以x和y结束,与3x3矩阵相同,并且以z=0结束 我已经试着解决了。对于一个向量x,y,1,我最终得到的是经过变换的向量ax+by+c,dx+ey+f,gx+hy+I,这意味着对于一个向量x,y,0,1,我希望得到经过变换的向量ax+by+c,dx+ey+f,0,。

我有一个二维齐次坐标的3x3变换矩阵:

a b c
d e f
g h i
我想在2D应用程序中(使用
glMultMatrix
)将其传递给OpenGL,但OpenGL采用4x4矩阵表示3D齐次坐标。我希望通过4x4矩阵转换的所有坐标以
x
y
结束,与3x3矩阵相同,并且以
z=0
结束

我已经试着解决了。对于一个向量
x,y,1
,我最终得到的是经过变换的向量
ax+by+c,dx+ey+f,gx+hy+I
,这意味着对于一个向量
x,y,0,1
,我希望得到经过变换的向量
ax+by+c,dx+ey+f,0,
。一个矩阵可以做到这一点(据我所知):


这是正确的吗?它有用吗?我不认为这是唯一一个能给出我想要的结果的矩阵,但我不太明白第三行和第四行(以及第四列)中应该或不应该出现什么。

如果你想让z坐标为
0
,你必须通过一个零行。另外,在最后一行中包括透视图部分:

a b 0 c
d e 0 f
0 0 0 0
g h 0 i

啊,谢谢!如果我正在转换的向量已经有z=
0
,我可以将第三行保留为
0 0 1 0
,以使z与z相同,对吗?为什么不保持第三行[0 0 1 0]的z不变?身份就是保持这种状态。第三行中的零向量表示破坏性投影变换。我知道即使一个点有z≠ 0它将变为0,而另一个将保持不变。但是除了你想的,还有其他原因吗?只是好奇。@legends2k不,这真的只是因为OP希望所有的z分量都是0(据我所知)。
a b 0 c
d e 0 f
0 0 0 0
g h 0 i