如何将一个用于齐次坐标的二维变换矩阵转换为在z=0平面内的三维变换矩阵?

4

我有一个用于2D齐次坐标的3x3变换矩阵:

a b c
d e f
g h i

我希望将这个应用于OpenGL(使用glMultMatrix),但OpenGL需要针对三维齐次坐标的4x4矩阵。我希望通过我的4x4矩阵转换后,所有坐标都以xy与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,?。据我所知,可以完成这个任务的一个矩阵是:
a b 0 c
d e 0 f
0 0 1 0
0 0 0 1

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

1个回答

5

如果您希望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 in 和 z out 相同,对吗? - Vegard
3
为什么不保留第三行 [0 0 1 0] ,让 z 保持不变?这样做就是保持单位矩阵的状态。第三行为零向量会导致破坏性的投影变换。我理解即使一个点的 z ≠ 0,它也会被变成 0,而其他的则会保持不变。但除了这个原因,你还有别的想法吗?只是好奇。 - legends2k
@legends2k 不,实际上只是因为 OP 希望所有的 z 分量都为 0(就我所理解的)。 - Nico Schertler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接