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

摄像机简介

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

确定摄像机参数

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

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

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

给出基本的变换算法

  1. 根据需要,自定义 c a m P o s \bf{camPos} camPos c a m T a r g e t \bf{camTarget} 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} camDir=camTargetcamPos,把 c a m D i r \bf{camDir} 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} camRight=up×camDir,把 c a m R i g h t \bf{camRight} 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} camUp=camDir×camRight c a m U p \bf{camUp} camUp标准化

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

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

根据上一步骤的基本操作,得到基本的变换矩阵 L o o k A t \bf{LookAt} 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} LookAt=RxUxDx0RyUyDy0RzUzDz00001100001000010PxPyPz1
其中 R \bf{R} R是右轴的分量、 U \bf{U} U是摄像机上轴的分量、 D \bf{D} D c a m D i r \bf{camDir} camDir的分量, P \bf{P} P是位置的分量。

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值