5.6.2 视图空间

为了形成定义场景的2D图像,我们必须将虚拟相机放在场景中。相机指定了观众可以看到的世界体积,因此通过这个世界的体积生成我们需要的2D图像。让我们定义局部坐标系统(称为视图空间,视觉空间,或相机空间),如图5.19。 它方便了在渲染管线的后期阶段相对于相机坐标系来描述它们,而不是相对于世界空间描述我们的场景顶点,从世界空间到视图空间的坐标变换被称为视图变换,以及相应的矩阵称为视图矩阵。view space

如果QW=(Qx,QY,QZ,1),UW=(UX,UY,UZ,0),VW=(VX,VY,VZ,0),和WW=(WX,WY,WZ,0)分别介绍原点,x轴,y轴,z轴(相对于世界空间的视图空间齐次坐标),那么我们知道,从§3.4.3可知,从视图空间到世界空间的坐标矩阵转换是:

coordinate matrix change

但是,这不是我们想要的转换。我们想从世界空间反向变换视图空间。但从§3.4.5召回的反向变换只是通过逆给出。因此。 W-1(即V)表示从世界空间转换到视图空间

世界坐标系统和视图坐标系统一般仅相差位置和导向,所以它使直观意义上,W = RT(即世界矩阵可以被分解为一个旋转后跟一个平移)。这种形式使更容易计算:

inverse

所以视图矩阵定义如下

view matrix

我们现在表明一种直观的方式来构造构建视图矩阵所需要的向量。设Q是摄像机的位置和设T
是摄像机瞄准的目标点。此外,令j是一个描述世界空间的“Up”方向的单位矢量。 (在
这本书中,我们使用世界XZ平面为我们的世界“地平面”和世界y轴描述了“Up”的方向;因此,J =
(0,1,0)只是平行于世界y轴的单位矢量。然而,这仅仅是一个惯例,而有些应用可能会选择xy平面作为接地平面,和z轴为“Up”方向)。参看图5.20,相机被赋予为:

TQ

w矢量描述相机的局部z轴单位向量u由下式给出:

ujw

这个矢量描述相机的局部x轴。最后,描述照相机的局部y轴的向量由下式给出:

v = w × u

因为w和u是正交单位矢量,w×u是一定是单位矢量,因此它不需要进行归一化。

因此,给定的相机的位置,目标点,和世界上“Up”方向,我们能够得出可以用于形成视图矩阵的相机的局部坐标系统。

XNA的数学库提供以下功能基于刚才所描述的过程计算视图矩阵

XMMATRIX XMMatrixLookAtLH( // Outputs resulting view matrix V
	FXMVECTOR EyePosition, // Input camera position Q
	FXMVECTOR FocusPosition, // Input target point T
	FXMVECTOR UpDirection); // Input world up vector j

一般世界y轴对应于“Up”方向,因此,“Up”矢量几乎总是J =(0,1,0)。作为一个例子,假设我们希望相对于世界空间摄像头位于(5,3,-10),并且照相机指向世界原点(0,0,0)。我们可以建立视图矩阵如下:

XMVECTOR pos = XMVectorSet(5, 3, -10, 1.0f);
XMVECTOR target = XMVectorZero();
XMVECTOR up = XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f);
XMMATRIX V = XMMatrixLookAtLH(pos, target, up);

本文固定链接:http://www.oxox.work/web/directx11/view-space/ | 虚幻大学

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

虚坏叔叔

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

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

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

打赏作者

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

抵扣说明:

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

余额充值