计算机图形学------空间摄像机

版权声明:所有的博客都是个人笔记,交流可以留言或者加QQ:2630492017 https://blog.csdn.net/qq_35976351/article/details/84888885

摄像机简介

物体在世界中是使用绝对坐标的,但是人认识世界是相对的,即从不同的角度观察会产生不同的效果,因此需要引入摄像机的概念,来默认人眼的观察。通过一个摄像机的变换矩阵,把世界坐标映射到摄像机坐标中,形成人观察到实体的具体位置情况。

确定摄像机参数

摄像机和空间物体是不同的。空间物体确定是根据给出一个绝对坐标系和三个轴相对于惯性系的方向,然后再进行确定的,但是摄像机比较复杂,因为摄像机需要确定位置,同时还有视线的方向。

给出一个新的定义方式, c a m P o s \bf{camPos} 表示摄像机空间的位置, c a m T a r g e t \bf{camTarget} 表示摄像机的观察的焦点,给出摄像机的反方向 c a m D i r = c a m P o s c a m T a r g e t \bf{camDir}=\bf{camPos}-\bf{camTarget} ,给出一个上轴 u p \bf{up} ,表示世界的 y y 轴的方向,当然,也可以是和y轴夹角小于90度的。

需要给出摄像机的右轴 c a m R i g h t \bf{camRight} ,右轴和 c a m D i r \bf{camDir} 垂直,指向右侧,如下图红色的向量:
在这里插入图片描述
还需要一个摄像机的上轴向量 c a m U p \bf{camUp}

给出基本的变换算法

  1. 根据需要,自定义 c a m P o s \bf{camPos} c a m T a r g e t \bf{camTarget}
  2. c a m D i r = c a m T a r g e t c a m P o s \bf{camDir}=\bf{camTarget}-\bf{camPos} ,把 c a m D i r \bf{camDir} 标准化。
  3. c a m R i g h t = u p × c a m D i r \bf{camRight}=\bf{up}\times\bf{camDir} ,把 c a m R i g h t \bf{camRight} 标准化
  4. c a m U p = c a m D i r × c a m R i g h t \bf{camUp}=\bf{camDir}\times\bf{camRight} c a m U p \bf{camUp} 标准化

× \times 表示向量的叉乘,其次坐标系是4维的,叉乘的时候,忽略掉第四个参数,只需要进行x y z坐标组成向量叉乘即可。

世界坐标变换到摄像机坐标

根据上一步骤的基本操作,得到基本的变换矩阵 L o o k A t \bf{LookAt}
L o o k A t = [ R x R y R z 0 U x U y U z 0 D x D y D z 0 0 0 0 1 ] [ 1 0 0 P x 0 1 0 P y 0 0 1 P z 0 0 0 1 ] \bf{LookAt}= \begin{bmatrix} \bf{R_x} & \bf{R_y} & \bf{R_z} & 0 \\ \bf{U_x} & \bf{U_y} & \bf{U_z} & 0\\ \bf{D_x} & \bf{D_y} & \bf{D_z} & 0 \\ 0 & 0 & 0 & 1 \end{bmatrix} \begin{bmatrix} 1 & 0 & 0 & -\bf{P_x} \\ 0 & 1 & 0 & -\bf{P_y}\\ 0 & 0 & 1 & -\bf{P_z} \\ 0 & 0 & 0 & 1 \end{bmatrix}
其中 R \bf{R} 是右轴的分量、 U \bf{U} 是摄像机上轴的分量、 D \bf{D} c a m D i r \bf{camDir} 的分量, P \bf{P} 是位置的分量。

L o o k A t \bf{LookAt} 矩阵乘以世界位置坐标即可得到相机位置坐标

猜你喜欢

转载自blog.csdn.net/qq_35976351/article/details/84888885