【问题标题】:How do I convert a 2D transformation matrix (for homogeneous coordinates) into 3D in the z=0 plane?如何在 z=0 平面中将 2D 变换矩阵(用于齐次坐标)转换为 3D?
【发布时间】:2015-07-30 10:28:20
【问题描述】:

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

a b c
d e f
g h i

我想在 2D 应用程序中将它传递给 OpenGL(使用 glMultMatrix),但 OpenGL 需要 4x4 矩阵用于 3D 齐次坐标。我希望我的 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

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

【问题讨论】:

    标签: opengl matrix coordinates coordinate-transformation homogenous-transformation


    【解决方案1】:

    如果您希望 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 相同,对吧?
    • 为什么不保持第三行 [0 0 1 0] 不变?身份将保持这种方式。第三行中的零向量意味着破坏性投影变换。我知道,即使一个点 z ≠ 0,它也会变为 0,而另一个点将保持不变。但是除了你的想法之外,还有其他原因吗?只是好奇。
    • @legends2k 不,这真的只是因为 OP 希望所有 z 分量都为 0(据我所知)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-25
    • 1970-01-01
    • 2015-12-08
    相关资源
    最近更新 更多