【问题标题】:How is this matrix transformation right? (Beginner) [closed]这个矩阵变换如何正确? (初学者)[关闭]
【发布时间】:2012-05-29 11:38:11
【问题描述】:

我被困在一个问题上,因为我不完全确定矩阵堆栈在这种情况下是如何工作的。 如果有人可以给我一步一步的过程,表明这个例子在这里发生了什么: 随题给出答案。

【问题讨论】:

  • 你能缩小你的问题描述范围吗?有什么你不明白也没关系,但是你做什么你明白了?我们有什么常识可以用来解释这一点?具体是什么,你的问题是什么?不幸的是,上述问题过于宽泛。
  • 我知道翻译部分很简单。我唯一难以理解的是那里每个声明的执行顺序。
  • 令 C 为当前坐标(相对于透视)变换矩阵,那么变换 T 将通过 C = TC 修改当前坐标变换矩阵。所以当你在坐标变换后绘制东西时,坐标(设为v)会乘以当前坐标变换矩阵(Cv),得到原始坐标中的坐标来渲染点。

标签: c++ opengl matrix


【解决方案1】:

让我们将正确答案中的球称为(数字也是绘制顺序):

4 - 2
3 1 -

我们从 (0, 0) 开始并转换为 (2, 0)。然后我们画球 1。这里没什么特别的。

我们保存当前的变换矩阵。

然后我们通过向量 (2, 2) 从 (2, 0) 平移,所以我们最终在 (4, 2)。然后我们画球 2。也不难。

我们弹出矩阵。这意味着它会丢弃所有转换,直到最后一次推送。所以我们最终回到 (2, 0),这是我们之前推送变换矩阵的地方。

我们通过向量 (-2, 0) 从 (2, 0) 平移,所以我们最终在 (0, 0) 处绘制球 3。

然后我们从 (0, 0) 通过向量 (0, 2) 平移,所以我们最终在 (0, 2) 处绘制球 4。

【讨论】:

  • 嗨,我完全理解,但令我困惑的部分是矩阵变换不是从最右边的矩阵开始的。
  • 例如 PQRS = P(Q(R(Sv))) ??所以最右边的矩阵首先相乘
  • 那么说最下面的语句会先执行不公平吗?
  • @Jay:不,tompost 语句首先执行。此外,由于矩阵在您编写时相乘,因此代码中的第一个矩阵是 S,第二个是 R 等等。堆栈只保存和恢复状态,它不会以任何方式改变它。
  • 最上面的语句总是先执行吗?我很困惑
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-02
  • 1970-01-01
  • 2011-03-17
  • 2020-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多