首页 > 其他分享 >5.6.2 视图空间

5.6.2 视图空间

时间:2022-12-16 21:34:35浏览次数:36  
标签:5.6 矩阵 世界 Up 视图 相机 空间


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

如果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可知,从视图空间到世界空间的坐标矩阵转换是:

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

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

所以视图矩阵定义如下

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

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

这个矢量描述相机的局部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);

 

 

标签:5.6,矩阵,世界,Up,视图,相机,空间
From: https://blog.51cto.com/u_11408356/5948475

相关文章

  • 3Dmax界面_视图调整
    一.试图模型显示效果的切换'默认是真实显示效果'线框模式 快捷键F3 ---->真实显示效果和线框显示效果的切换(切换到线框显示效果再按F3就切换到了真实显示效果)。线面......
  • 企业级自定义表单引擎解决方案(十八)--列表视图属性设置
    表格对于后台管理类的系统来说,至关重要,系统大多数功能都需要以表格的方式展示业务内容,系统开发人员多数时间也是围绕着表格进行业务编码,接触过很多后台管理系统的框架,我个......
  • DRF之视图
    视图两个视图基类APIViewGenericAPIViewAPIView:APIView是RESTframework提供的所有视图的基类,继承自Django的View父类APIView与View的不同之处在于-......
  • C# 命名空间和程序集 小记
    前言本文只是为了复习,巩固,和方便查阅,一些知识点的详细知识会通过相关链接和文献标记出来。命名空间1.1概念可以把命名空间看做字符串,他加在类名或类型名前面并且通过......
  • STL之空间配置器
    空间配置器allocator只是基层内存配置/释放行为的一层薄薄的包装,没有任何效率上的强化。一般而言,C++内存配置操作和释放操作如下:classFoo{...};Foo*pf=newFoo;......
  • 【数字视频技术介绍】| 编码中的时间冗余和空间冗余
    公众号回复:666,领取学习资源大礼包这是一份循序渐进的视频技术的介绍,来自Github仓库:​​https://github.com/leandromoreira/digital_video_introduction​​本文档旨在尽......
  • 221215_文件系统造成“占用空间”与“大小”不同
    存储空间都去哪了?占用空间比文件大太多?可能是文件系统和默认簇大小惹的祸小平友littlePING于2019-11-3019:20:28发布9049收藏12文章标签:文件系统簇硬盘占用空......
  • Docker下/var/lib/docker/overlay2空间清理办法
    Docker下/var/lib/docker/overlay2空间清理办法Docker下/var/lib/docker/overlay2空间清理办法1.查看磁盘占用   df-h2.Docker的内置CLI指令doc......
  • oracle 建表时表空间的一些参数pctfree initrans maxtrans storage的含义
    createtableX_SMALL_AREA(idx_idNUMBER(20)notnull,pss_idx_idNUMBER(20),update_logVARCHAR2(512),update_dateDATE,constrai......
  • Eclipse rcp使用代码显示/隐藏视图(view)
    1/**2*显示视图3*@paramid视图ID4*/5publicstaticvoidshowView(Stringid){6if(id==null||id.trim().equals("")){7return;......