博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[翻译]观察变换View Transform (Direct3D 9)
阅读量:6788 次
发布时间:2019-06-26

本文共 1103 字,大约阅读时间需要 3 分钟。

这一节介绍在Direct3d中观察变换的基本概念和怎么去设置观察矩阵。

视口变换把观察者放在世界坐标系中,并把顶点转化到摄像机空间。在摄像机空间,摄像机或者说观察者在原点,观察方向为z轴正向。Direct3d使用左手坐标系,所以z轴正向进入场景。观察矩阵把重新变换世界中的物品、摄像机位置、摄像机空间原点和方向。

有许多方法可以创建观察矩阵。摄像机在世界空间中的逻辑位置和方向被用作起始点来创建观察矩阵,得到观察矩阵会被应用于场景中的三维建模。观察矩阵平移和旋转在摄像机空间的模型,将他们放入摄像机空间中,摄像机在原点。创建观察矩阵的一种方法是在每个轴联合平移矩阵和旋转矩阵。这种方法用可以下面的矩阵等式来看

在这个公式中,V是要创建的观察矩阵,T是在世界中重定位物体的平移矩阵,RxRz分别是绕x轴,y轴和z轴旋转物体的旋转矩阵。这个变换和旋转是根据摄像机的南位置和朝向的。所以如果摄像机在世界坐标(10,20,100),那么变换矩阵把模型在x轴移动-10,y轴移动-20,z轴移动-100。旋转矩阵根据公式和摄像机的朝向的关,根据摄像机空间轴与世界坐标系各轴夹角有关。例如,前面提到摄像机是垂直向下的,那么他的z轴与世界空间的z轴有90角夹角,如下图所示

旋转矩阵将角度相同但方向相反的旋转量应用于场景中建模。这个摄像机的观察矩阵包含了一个绕x轴90度的旋转。旋转矩阵与平移矩阵合并生成观察矩阵,观察矩阵调整物品在场景中的位置和方向,使他们的顶部朝着摄像机,看起一好像摄像机在建模的上方一样。

 

设置观察矩阵

D3DXMatrixLookAtLH和D3DXMatrixLookAtRH这些函数可以根据摄像机位置和观察方向创建一个矩阵。

下列实例创建一个观察矩阵应用于左手坐标系。

D3DXMATRIX out;

D3DXVECTOR3 eye(2,3,3);
D3DXVECTOR3 at(0,0,0);
D3DXVECTOR3 up(0,1,0);
D3DXMatrixLookAtLH(&out, &eye, &at, &up);

 

Direct3d使用世界变换矩阵和观察变换矩阵来计算内部的一些数据结构。每次你给定一个变换矩阵都会重新计算相关的内部数据结构 。频繁的设置这些矩阵,会比较比较耗时。通过将世界矩阵和观察矩阵串接成一个世界/观察矩阵,并将之设置为世界矩阵,然后将观察矩阵设为单位矩阵,应用程序可以将所需的计算量减到最小。最好保存一份单独的世界矩阵和观察矩阵的副本在高速缓存中,这样就可以根据需要修改、串接及重置世界矩阵。为清晰起见,Direct3D示例很少使用这项优化。

出处:
作者:

转载地址:http://ebpgo.baihongyu.com/

你可能感兴趣的文章
10月20日云栖精选夜读:揭秘云栖大会VR直播云服务解决方案的技术亮点和核心能力...
查看>>
DockOne微信分享(一四三):FreeWheel基于Kubernetes容器云构建与实践:应用编排与服务质量保证...
查看>>
【hadoop】 running beyond virtual memory错误原因及解决办法
查看>>
5G概念炒的火热,公共WiFi建设却为何不见进展?
查看>>
c/c++中指针学习的两个绝好例子
查看>>
天云郭宏:谈传统IDC困境 指点云建设
查看>>
《Linux From Scratch》第三部分:构建LFS系统 第六章:安装基本的系统软件- 6.6. 创建必需的文件和符号链接...
查看>>
云计算的最大问题是安全还是隐私?
查看>>
PDMS call Operating System Command
查看>>
如何取消codeblocks对msvcr100.dll的依赖?
查看>>
自动化生成 Openstack 新项目开发框架
查看>>
Jack Ma 你当初UT了没?
查看>>
IBM联手传智播客 落地大数据应用人才培养计划
查看>>
AMD正式宣布拆分芯片制造业务 中东大鳄入主
查看>>
OCZ内部RAID 0固态硬盘性能实测
查看>>
爱尔兰地方议会再次否决一光伏发电项目
查看>>
Appinions:IDC对物联网影响力位居前三
查看>>
《网络空间欺骗:构筑欺骗防御的科学基石》一2.4 集成化网络空间欺骗与计算机防御框架...
查看>>
渤海银行双活数据中心建设值得中小银行借鉴
查看>>
赛普拉斯推出业内首款专为IoT设计的微控制器架构PSoC 6
查看>>