scarletsky / scarletsky.github.io

http://scarletsky.github.io
10 stars 5 forks source link

2020/06/09/games101-notes-transformation/ #10

Open utterances-bot opened 3 years ago

utterances-bot commented 3 years ago

Games101 笔记 —— 变换 - scarletsky

简介 本文《GAMES101-现代计算机图形学入门》系列教程的课程笔记,仅用于个人学习使用。 二维变换 二维变换是指二维在平面中进行的变换,一个二

https://scarletsky.github.io/2020/06/09/games101-notes-transformation/

teoking commented 3 years ago

闫老师在上课时明确强调,不希望大家在博客贴作业代码。你上面都已经推导出了fov和aspect求l,r,b,t了,代码已经显而易见,后面就没必要再把代码贴出来。

Tcyily commented 3 years ago

正交投影矩阵将N=2,F=4带进去,计算出来的结果不是2映射到-1, 4映射到1

scarletsky commented 3 years ago

@Tcyily 上面的公式有个前置条件的,那就是 摄像机朝向-Z,也就是 N > F。 所以你的 N 应该是 -2,F 应该是 -4。 于是算出来的正交矩阵是

| 1 0 0 0 |
| 0 1 0 0 |
| 0 0 1 3 |
| 0 0 0 1 |

这个矩阵就是往 Z 平移 3 个单位而已,刚好就是 -2 + 3 = 1,-4 + 3 = -1。

Tcyily commented 3 years ago

N = -3, F = -9; | 1 0 0 0 | | 0 1 0 0 | | 0 0 1/3 6 | | 0 0 0 1 | 难道我算错了嘛(我记得矩阵相乘的结果是【0, 0, 2/(n-f), -(n+f)/(n-f)】 这个矩阵作用于 z的话是先缩放,所以平移的量理应也受到缩放量影响

scarletsky commented 3 years ago

@Tcyily 理解这个的关键应该是这个矩阵是通过先平移再缩放得到的。

M_ortho = S_ortho x T_ortho

第三行确实是

| 0 0 1/3 6 |

于是有

N = -3
F = -9
N' = (N + 6) * 1/3 = 3 * 1/3 = 1
F' = (F + 6) * 1/3 = -3 * 1/3 = -1
scarletsky commented 3 years ago

@Tcyily

另外,你没有记错,真正的正交矩阵的结果是如你所说:

具体证明过程可以看这里

games101 闫老师是为了方便我们理解所以就把正交矩阵解释成先平移再缩放,这也很符合线性代数的思路。

Tcyily commented 3 years ago

@Tcyily 理解这个的关键应该是这个矩阵是通过先平移再缩放得到的。

M_ortho = S_ortho x T_ortho

第三行确实是

| 0 0 1/3 6 |

于是有

N = -3
F = -9
N' = (N + 6) * 1/3 = 3 * 1/3 = 1
F' = (F + 6) * 1/3 = -3 * 1/3 = -1

如果按照之前文中给出的矩阵,按照矩阵乘法来的话,得到的结果会是

N' = (N 1/3 ) + 6 = -1 + 6= 5 F' = (F 1/3) + 6 = -3 + 6 = 3 而不是 N' = (N + 6) 1/3 = 3 1/3 = 1 F' = (F + 6) 1/3 = -3 1/3 = -1

scarletsky commented 3 years ago

@Tcyily

如果按照之前文中给出的矩阵,按照矩阵乘法来的话,得到的结果会是 N' = (N 1/3 ) + 6 = -1 + 5= 5 F' = (F 1/3) + 6 = -3 + 6 = 3

这是因为按照正常的算法的话,矩阵变换点都是先缩放再平移的(最后做加法),而 games101 里面强调的是先做平移再缩放。

Tcyily commented 3 years ago

@Tcyily

如果按照之前文中给出的矩阵,按照矩阵乘法来的话,得到的结果会是 N' = (N 1/3 ) + 6 = -1 + 5= 5 F' = (F 1/3) + 6 = -3 + 6 = 3

这是因为按照正常的算法的话,矩阵变换点都是先缩放再平移的(最后做加法),而 games101 里面强调的是先做平移再缩放。

image 我的意思是先做平移再缩放。然而他们两个的矩阵结合的结果不是这样子的,你用这样的矩阵去作用于点就会是先缩放1/3,在平移6这样的效果。 可以用这个链接测试下你这个矩阵作用在点 上的结果。 https://matrix.reshish.com/zh/multiplication.php

scarletsky commented 3 years ago

@Tcyily 噢,刚刚我又算了一遍,是我文中算错了。正确结果应该是

scarletsky commented 3 years ago

@Tcyily 我更新了,感谢指出错误 :smile: