首页 > 其他分享 >04 Viewing Transformation

04 Viewing Transformation

时间:2023-04-13 21:12:15浏览次数:42  
标签:matrix 04 矩阵 相机 Viewing tag vec Transformation view

关键点

  • ModelView Transformation Matrix (1-3)
  • Orthographic Projection Matrix (4)
  • Perspective Projection Matrix (5-6)

1. View/Camera/ModelView Transformation

  • MVP(model transformation -> view transformation -> projection transformation)
  • Camera define (Position e, look at/gaze direction g, up direction t)
  • 考虑到相机拍摄结果是相机与物体的相对结果,所以固定相机与固定物品效果一样,固定标准如下:

  • 将相机运行(e,g,t)变换到相机固定(0,-z,y)
    首先进行平移,(xe,ye,ze)到原点(0,0,0):

\[T_{view}= \left[ \begin{matrix} 1 & 0 & 0 & -x_e \\ 0 & 1 & 0 & -y_e \\ 0 & 0 & 1 & -z_e\\ 0 & 0 & 0 & 1 \\ \end{matrix} \right]\tag{1} \]

然后进行旋转,g->-Z, t->Y, gxt->X,直接求解旋转矩阵比较复杂,所以求其逆矩阵(-g<-Z, t<-Y, gxt<-X),可以直接由g与t的向量表示得到,同时考虑到旋转矩阵的逆矩阵是其转置,得到旋转矩阵:

\[R_{view}= \left[ \begin{matrix} x_{\vec{g}\times\vec{t}} & y_{\vec{g}\times\vec{t}} & z_{\vec{g}\times\vec{t}} & 0 \\ x_t & y_t & z_t & 0 \\ x_{-g} & y_{-g} & z_{-g} & 0\\ 0 & 0 & 0 & 1 \\ \end{matrix} \right]\tag{2} \]

得到视图变换矩阵:

\[M_{view}=R_{view}T_{view}\tag{3} \]

视图变换矩阵是世界固定坐标系(物理意义直观)向相机固定坐标系(便于投影)转换的变换矩阵,在相机运动坐标系下可以通过相机位置得到视图变换矩阵,通过该矩阵可以得到所有物体在相机固定坐标系下的位置。

2. Projection Transformation

  • Orthographic projection 正交投影 and Perspective projection 透视投影
    比起正交投影,透视投影可以造成近大远小的效果。
    对于透视投影,入射光线是锥形;对于正交投影,入射光线是平行的,即相机无限远。

2.1 Orthographic projection

对空间中某一个立方体空间作正交投影:

  • 定义一个空间立方体,即定义左右下上远近的六个位置[l,r]x[b,t]x[f,n](分别为xyz坐标,其中left<right,bottom<top,far<near(因为-z),符合右手);然后映射到标准立方体[-1,1]^3(先平移中心到原点,再缩放)。
  • 变换矩阵如下:

\[M_{ortho}= \left[ \begin{matrix} \frac{2}{r-l} & 0 & 0 & 0 \\ 0 & \frac{2}{t-b} & 0 & 0 \\ 0 & 0 & \frac{2}{n-f} & 0\\ 0 & 0 & 0 & 1 \\ \end{matrix}\right] \left[\begin{matrix} 1 & 0 & 0 & -\frac{l+r}{2} \\ 0 & 1 & 0 & -\frac{b+t}{2} \\ 0 & 0 & 1 & -\frac{f+n}{2}\\ 0 & 0 & 0 & 1 \\ \end{matrix} \right]\tag{4} \]

2.2 Perspective projection

2.2.2 视锥

  • Aspect Ratio 宽高比
  • Vertical Field of view (fovY) 垂直可视角度

2.2.1 投影

规定近平面不变、远平原z轴位置不变、远平面中心位置不变,压缩远平面,然后进行正交投影。

首先进行压缩:


由齐次坐标中点的一致形式,将压缩结果中的各个已知维度表达为原坐标的乘积形式:

那么,就可以使用矩阵变换来表示:

相应的变换矩阵为:

同时,考虑到z坐标的映射等于自身(不是坐标一样,而是表示齐次坐标下的同一z轴位置),可以得到近平面的关系:

此外,由于中心点映射自身,得到远平面

可得:

最终得到:

\[M_{persp->ortho}= \left[ \begin{matrix} n & 0 & 0 & 0 \\ 0 & n & 0 & 0 \\ 0 & 0 & n+f & -nf\\ 0 & 0 & 1 & 0 \\ \end{matrix} \right]\tag{5} \]

\[M_{persp}=M_{ortho}M_{persp->ortho}\tag{6} \]

标签:matrix,04,矩阵,相机,Viewing,tag,vec,Transformation,view
From: https://www.cnblogs.com/etherovo/p/17316010.html

相关文章

  • JAVAWEB-项目搭建准备工作八步骤-2023-04-13
    第一步:生成一个javamavenweb项目第二步:配置TOMCAT第三步:测试项目是否可以跑起来第四步:导入maven各个jar包+增加build解决资源导出问题<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://ww......
  • 2023/04/12刷题
    C.MakeItGood链接C.MakeItGood这个题是说去掉前缀,我们可以发现如果一个数列可以分为一个连续的上升区域和一个连续的下降区域的话,该数列是好的,该题的思路就是从后向前找到符合该特征的最长的序列#include<iostream>#include<algorithm>#include<cstdio>#includ......
  • 随笔20230413
    突然很想找个根本不讲中文的国家生活个一年两年。远离世俗、所有人,只和自己的灵魂独处一会,仔细地问问自己,你、我究竟从何而来,又终将魂归何处。我有深厚的基础生物知识,我系统学习过大量的理工科知识,我理解万事万物都有其运行的规律我明白一切缘起都终将湮灭可是我还是固执的认......
  • ubuntu 16.04.7初始化脚本
    #!/bin/bash#在root用户下运行cp/etc/apt/sources.list/etc/apt/sources.list.baksed-i"s@http://.*archive.ubuntu.com@http://mirrors.tuna.tsinghua.edu.cn@g"/etc/apt/sources.listsed-i"s@http://.*security.ubuntu.com@http://mirrors.tuna.tsingh......
  • 03 Transformation
    关键点AffineTransformation(LinearTransformation,Transmation)HomogeneouscoordinatesCompositeTransform2Dand3D1.LinearTransformation(2Dforinstacnce)1.1ScaleReflection1.2Shear1.3Rotate默认以原点为中心逆时针。1.4总结:LinearTransfo......
  • HDU 5045 Contest(费用流)
    题目地址:HDU5045终于在比赛中用网络流A了一道题。。。刷了那么多网络流,终于用到一次了。。虽然题目很简单,但是还是要纪念一下下。。。我这题的思路就是求m/n次费用流,每n个算作同一轮,对这同一轮的求最大费用流。建图就很简单了,最简单的二分图模型。代码如下:#include<iostre......
  • HDU 2604 Queuing(矩阵快速幂)
    题目地址:HDU2604这题只要推出公式来,构造矩阵就很容易了,问题是推不出公式来。。TAT。。从递推的思路考虑,用f(n)表示n个人满足条件的结果,如果最后一个是m则前n-1人可以任意排列,有f(n-1)种;如果是f,则考虑后两位mf和ff,没有一定满足或者一定不满足的状态,所以继续考虑一位,考虑后三位......
  • docker----day04()
    面试如何自定制上下文管理器#一个对象如果实现了__enter__和___exit__方法,那么这个对象就支持上下文管理协议,即with语句##上节回顾```python#1docker启动,停止,查看状态命令 systemctlstartdockersystemctlstopdockersystemctlstatusdockerd......
  • ubuntu 20.04 基于docker快速搭建中文 的一些问题解决 Utilization of discoverer pro
    1.Utilizationofdiscovererprocessesover75%解决办法问题状态如下zabbixserver在开启Discovery功能后,zabbixweb页面报警提示:“Zabbixserver:Ulitizationofdiscovererprocessesover75%”。原因:每个discovery任务占用一个discovery进程,但是zabbixserver默认只配置了一......
  • 04_HTTPS实验
    04_HTTPS实验《信息安全综合实践》实验报告HTTPS实验姓名:学号:邮箱:实验时长:分钟一、实验目的理解计算机网络基本概念;了解密码技术在网络安全中的应用;学习和掌握web服务搭建基本流程;学习和掌握https服务搭建基本流程。二、实......