矩阵变换和纹理映射坐标混淆(初学者)[关闭]

Posted

技术标签:

【中文标题】矩阵变换和纹理映射坐标混淆(初学者)[关闭]【英文标题】:Matrix Transformations and Texture mapping coordinates confusion (Beginner) [closed] 【发布时间】:2012-06-04 09:09:41 【问题描述】:

我正在做一些关于矩阵变换和纹理映射的问题,我遇到了两个我不知道如何得到答案的问题。答案以红色突出显示。 (这些可以在 C++ 中实现,但在我这样做之前我只是想先熟悉一下转换)

对于矩阵变换,它不应该有-1(矩阵的右上角)用于翻译而不是0

编辑:仍然需要回答第二个问题 我的第二个问题是我不确定他们是如何获得y coordinate for point D

【问题讨论】:

关于变换矩阵,我认为给出的答案是错误的。它在矩阵 c) 的 x 平移中应该有一个额外的 -1.5。在 x 轴上缩放 0.5 时,矩形将从 2.5 开始缩小。要将其变为 1,您需要 -1.5 的翻译 @Unni 你好,根据答案没有涉及翻译...看看下面给出的答案,有道理。 我认为这样的问题会在 math.stackexchange.com 上找到更好的地方 【参考方案1】:

回答第一个问题:

生成的图像沿 x 轴压缩成一半,并沿 Y 轴拉长到两倍长度。

缩放矩阵就是答案。缩放矩阵是一个对角矩阵,元素为X-scaling, Y-scaling, 1

现在,

| 0.5 0 0 |
|  0  2 0 |
|  0  0 1 |

是一个典型的缩放矩阵。它将 x 轴缩放 0.5(也就是说,它将 x 轴拉伸(压缩)成一半)。这在 Matrix(1,1) 中很明显。

在 Y 方向上的缩放在 Matrix(2,2) 中给出。那边的2表示,Y轴被拉长了2倍。

注意: 在这个问题中,不涉及翻译。请注意,简单的缩放使它看起来像是平移。

【讨论】:

有道理...我认为它的发生是因为首先将对象转换回原点然后缩放然后返回.. 实际上,图像被缩放没有平移到对象的中心。按照你的方式(目前只考虑 X 方向),第一个翻译将是-3。下一次缩放,并由+3 重新翻译。这将导致图像在同一位置缩放。里面不会有那种“明显”的翻译:) 哦耶!我的坏我的坏...想知道他们为什么让它变得棘手。如果对象从原点开始,那么根本就没有问题...你知道第二个问题的答案吗=) 很高兴你知道了。关于第二个问题,我认为答案是错误的。沿 Y 方向没有重复纹理。这让我觉得 Y 纹理坐标只是 1 我认为同样的事情,但答案是我的讲师给出的,他不太可能在那个问题上犯了错误。但是生病给他发电子邮件,看看他有没有,然后更新这篇文章=)【参考方案2】:

找到第二个问题的答案。

点 B 上方的角必须具有 y 坐标 1,否则您将看不到底面。因此,对于点 D,您需要 y 坐标 2。如果您从 B 到角点到 D 的线,那么 textre 图像将重复两次。

【讨论】:

以上是关于矩阵变换和纹理映射坐标混淆(初学者)[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

矩阵论练习12(线性映射的坐标变换证明)

矩阵论练习12(线性映射的坐标变换证明)

unity 从深度纹理重建世界坐标

OpenGL的工作流程

Unity Shader 获取深度纹理和法线纹理

详解OpenGL的坐标系投影和几何变换