图形学基础 (三) 观测变换

变换简介

总的来说变换分为三种:

  • model transformation (假如你在照相的时候找到好的位置, 安排好人, 这个步骤类似叫做模型变换)
  • view transformation (照相的找到一个好的角度, 比如相机朝向哪, 这个是视图变换)
  • projection transformation (把3D的人冲洗到2D的图, 就是投影变换)
  • 哈哈哈就是MVP变换

这次重点介绍视图变换

view transformation
  • 指定相机位置:

image-20211204170944449

  • 相机看向哪:

image-20211204171020167

  • 相机的上方向, 很好理解, 比如说相机头可以朝向你, 但是镜头可以旋转, 你成像就歪了

image-20211204171150469

image-20211204171214645

key observation
初始条件

这里规定几个重要的初始条件:

  1. 相机位置一直在原点
  2. 相机初始朝向是 − z -z z 方向
  3. 相机的上方向是y

image-20211204171719722

相机从不同条件变换到初始条件

image-20211204172032516

  • 现在这个相机有个自己的e, g, t, 需要变换e到 (0, 0, 0), g 为 -z, t为y

image-20211204172127551

这个怎么做呢? 把它分为3步:

  1. 把e平移到原点(先考虑平移再旋转比较简单)

image-20211204172242478

  1. g 旋转到 -z 方向, 把 t 旋转到 Y 方向, 把 (gxt) (叉乘)旋转到 X 方向
  • 但是这样有些困难, 反过来就好写了, 比如把X(1, 0, 0, 0) 变换到 (gxt), 把Y(0, 1, 0, 0) 变换到 t

image-20211204190010723

image-20211204185915438

注意这里是向量, 最后一个维度的数是0, 比如X是(1, 0, 0, 0)

  • 这里有个矩阵怎么求逆的问题, 其实这个问题很好解决, 因为这里是 旋转矩阵 所以它的逆就是它的 转置

image-20211204190414962

  1. 所以通过这两步就求解了如何把任意的位置变换到相机初始位置

image-20211204190514704

image-20211204190520201

image-20211204190525635

  1. 注意这里还要对物体做同样的变换, 因为要保持和相机的相对位置不变

image-20211204190758948

投影简介

  • 一般投影分为两类, 一种是 orthographic projiction (正交投影), 一种是perspective projection (透视投影)

image-20211204191140482

左边的原来的平行关系不变, 右边的原来物体的平行关系发生了改变, 正交投影没有近大远小, 透视投影有

image-20211204191340862

正交投影

把相机放在原点上, 向 -z 看, y是向上的方向

image-20211204192105538

  • 会发现只要把对应z的坐标扔掉其实就是图上的坐标, 现在有个问题是如何区分前和后呢? z被扔掉了

  • 不管x和y范围多大, 都将其变换到[-1 , 1], 这是约定俗成的方法

  • 总结图如下:

image-20211204192631249

图形学中的一般做法

image-20211204192806570

  • 对于一个长方体将它中心平移到原点, 然后都缩放到 [-1, 1] 范围内

这里是如何判断前后呢? 是根据z的值来判断的, 因为相机指向的是-z, 所以离相机越近z的值就越大, 越远z就越小

矩阵表示
  • 把先平移中心再变换的方式用矩阵表示

image-20211204193423949

  • 这里的变换scale可以这样理解, 原来的尺度是r-l, 现在的尺度是-1到1也就是2, 所以是r-l对应2
透视投影
  • 在开始之前先考虑齐次坐标, 对于最后的一个维度的数只要不是0都可以进行简化, 所以x, y, z, 1都乘z还是不变, 还是一样的点

image-20211204195516410

  • 对于正交投影, 我们可以规定近和远两个平面 ,同样对于透视投影也可以定义这样两个平面, 注意是从右边投影到左边

image-20211204195744884

  • 定义近和远两个平面, 近平面不变, 中心点不变

下面左边的红点是相机的位置, 然后其向 -z 方向看, (x, y, z) 变到 (x’, y’, z’), 边有个比例关系

image-20211205094151608

image-20211205094319956

image-20211205094419751

  • 这里注意为啥z这里是unknown呢? 不应该是n吗, 其实这里把投影先看成挤压操作, 这个操作是平面内的, 不是投影, 所以中心点的z不变

image-20211205095634113

现在把从(x, y, z, 1) 到 (nx/z, ny/z, unknown, 1) 的变换过程视作左乘一个矩阵, 既然表示一个点, 也就是说可以都乘z, 最后的矩阵变换就可以这样写:

image-20211205101459102

image-20211205101810732

这里有两个条件可以利用:

  1. 近平面的点经过映射后还是它自己

image-20211205101957068

image-20211205102058284

可以知道变换矩阵前面两个数是0, 也就是和x, y没有关系

  1. z平面的中心点挤压后 z值不变

image-20211205102742794

  1. 求解A, B

image-20211205102839212

  1. 最后再进行正交投影
  • 总结来说就是先挤压, 后投影
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

live_for_myself

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值