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

本文共 1095 字,大约阅读时间需要 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://qlgul.baihongyu.com/

你可能感兴趣的文章
SpringCloud学习笔记(4)——Zuul
查看>>
mysql主从备份及原理分析
查看>>
Docker 入门 --- 命令总结
查看>>
MySQL 批量写入数据报错:mysql_query:Lost connection to MySQL server during query
查看>>
【spring boot】spring boot中使用@RestController不起作用,不返回json,依旧去找访问接口的请求地址对应的页面...
查看>>
简约响应式布局样式
查看>>
iOS平台XML解析类库对比和安装说明
查看>>
各种纪念-好久没更新了
查看>>
渴望出差
查看>>
非常酷的国外网站导航设计案例欣赏
查看>>
xp sp3+iis 服务器不可用
查看>>
【windows phone】控件1
查看>>
使用curl抓取网页遇到HTTP跳转时得到多个HTTP头部的问题
查看>>
JQuery学习笔记
查看>>
UITextField的详细使用
查看>>
oracle触发器select into和cursor用法的区别
查看>>
TortoiseGit + msysgit 记住帐号密码方法及使用密匙的方法
查看>>
Python中的else
查看>>
zend_db连接mysql(附完整代码)(转)
查看>>
五个人二个月为什么不等于十个人一个月
查看>>