这周的加班生活真的是太累了, 每天晚上都是10点以后下班, 所幸下周游戏就和玩家见面了, 工作强度应该会减少一些了, (但愿如此……) 这周的文章稍微偷个懒, 记录内容会简略一些, 主要还是卡在了射影平面与齐次坐标这里, 没有理清拓扑学中的齐次坐标与图形学中的齐次坐标之间的联系, 在阅读了卡尔加里大学的两位老师写的齐次坐标讲义(homocoords) 以后, 困惑之处仿佛减少了许多, 特此记录~
实际上, 由于两位老师是计算机科班出身的, 所以感觉齐次坐标的很多内容并没有深入到本质, 所以也会结合之前学习的一些拓扑知识来讲解~
$\\$ 射影平面目前有两种定义方式:
$\\$ $\cdot$ 实射影平面是欧氏空间中所有过原点的直线形成的空间.
$\\$ $\cdot$ 实射影平面是可以和把$O$形成双射的平面.
$\\$ 在学习了射影和截影的概念以后, 会发现上述两种定义是等价的. 一般来说, $n$维射影平面是无法嵌入在$n$维欧式空间当中的, 只能往更高维数的欧氏空间嵌入, 通常会把$n$维射影平面嵌入到$n+1$维的欧氏空间当中. 例如在图形学当中会把$(x, y, z)$写成$(x, y, z, 1)$的形式, 这背后便是应用了一个嵌入映射的结果, 由定义可知这同时也是一个同胚映射, 能保持拓扑性质不变.
$\\$ 在三维射影空间中处理点个人觉得主要有三个好处:
$\\$ $\cdot$ 能够使用矩阵乘积表示仿射变换(如平移变换).
$\\$ $\cdot$ 对于点的处理非常灵活, 如$(x, y, z)$与$(x/w, y/w, z/w)$在三维欧氏空间中是不等价的, 但等价关系在三维射影空间中却是成立的, 用等价类的语言即可描述为$[(x, y, z)] = [(x/w, y/w, z/w)]$; 当$w $$ = 0$时$(x/w, y/w, z/w)$表示一个无穷远的点, 因此在三维射影空间中还可对无穷远点进行处理.
$\\$ $\cdot$ 可以使用任一嵌入映射, 如$(x, y, z) \to (x, y, z, w), w \in R$, 因此在渲染流水线计算时经常会发现通过一个四维矩阵改变了点的$w$分量, 有人可能会问这没有关系么? 答案是确实没有关系, 由于嵌入映射的同胚性质, 它依旧没有改变原来的拓扑性质.
PS: 讲义中还从齐次坐标的角度出发去解释重心坐标, 个人觉得还是十分新颖有趣的观点, 总而言之, 这篇讲义还是值得多读两遍的, 尤其是齐次坐标裁剪那一部分, 说不定能应用到工作上来~