[翻译]观察变换View Transform (Direct3D 9)
这一节介绍在Direct3d中观察变换的基本概念和怎么去设置观察矩阵。
视口变换把观察者放在世界坐标系中,并把顶点转化到摄像机空间。在摄像机空间,摄像机或者说观察者在原点,观察方向为z轴正向。Direct3d使用左手坐标系,所以z轴正向进入场景。观察矩阵把重新变换世界中的物品、摄像机位置、摄像机空间原点和方向。
有许多方法可以创建观察矩阵。摄像机在世界空间中的逻辑位置和方向被用作起始点来创建观察矩阵,得到观察矩阵会被应用于场景中的三维建模。观察矩阵平移和旋转在摄像机空间的模型,将他们放入摄像机空间中,摄像机在原点。创建观察矩阵的一种方法是在每个轴联合平移矩阵和旋转矩阵。这种方法用可以下面的矩阵等式来看

在这个公式中,V是要创建的观察矩阵,T是在世界中重定位物体的平移矩阵,Rx到Rz分别是绕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示例很少使用这项优化。
[翻译]观察变换View Transform (Direct3D 9)的更多相关文章
- View Transform(视图变换)详解
http://www.cnblogs.com/graphics/archive/2012/07/12/2476413.html 什么是View Transform 我们可以用照相机的原理来阐释3D图形 ...
- (转)View Transform(视图变换)详解
原文作者讲得太好了,唯有这篇让我对视图矩阵了解的清晰了很多. --------------------------------------------------------------------- ...
- 基本3D变换之World Transform, View Transform and Projection Transform
作者:i_dovelemon 来源:CSDN 日期:2014 / 9 / 28 主题:World Transform, View Transform , Projection Transform 引言 ...
- [翻译]投影变换 Projection Transform (Direct3D 9)
你可以认为投影变换就是控制摄像机内部的一种方式.他可以类推为为摄像机选择一个漏字板.它是三种变换中最难懂的.本文只讨论以下的一些内容. 典型的投影变换就是缩放和透视投影.投影就变换把视椎转化为一个立方 ...
- 理解SVG坐标系统和变换: transform属性
SVG元素可以通过缩放,移动,倾斜和旋转来变换-类似HTML元素使用CSS transform来变换.然而,当涉及到坐标系时这些变换所产生的影响必然有一定差别.在这篇文章中我们讨论SVG的transf ...
- Pytorch数据变换(Transform)
实例化数据库的时候,有一个可选的参数可以对数据进行转换,满足大多神经网络的要求输入固定尺寸的图片,因此要对原图进行Rescale或者Crop操作,然后返回的数据需要转换成Tensor如: import ...
- QT 使用QPainter 绘制图形 和 世界变换 world transform
1. 绘制椭圆 饼状型 贝塞尔曲线 绘制图像重写方法 void paintEvent(QPaintEvent *event)即可. void Widget::paintEvent(QPaintEve ...
- CSS3总结七:变换(transform)
2D视图模型解析 3D视图模型解析 平移 旋转 伸缩 扭曲 z轴方向平移与perspective的神秘关系 matrix()终极变幻的方法 一.2D视图 2D视图就是默认平面上的每个点都与视线垂直,图 ...
- 游戏对象的变换-Transform
问题: 在给GameObject设置位置的时候,怎么保证设置的位置在摄像机的范围内? 主要看摄像机的深度轴和你的GameObject的深度轴,比如如果现在的平面是: Z–> Y, ...
随机推荐
- JavaScript的函数和事件(转)
一.默认函数 JavaScript提供了一些默认的函数 编码函数escape():将非字母.数字字符转换成ASCII码 译码函数unescape():将ASCII码转换成字母.数字字符 求值函数eva ...
- Sublime中增加格式化代码的快捷键
[Preferences]->[Key Bindings]->[User]中,添加如下: { "keys": ["alt+shift+f"], &q ...
- Angularjs之表单实例(三)
正确引用js css文件后可运行 <!DOCTYPE html> <html ng-app='myApp'> <head> <title>Bootstr ...
- Hadoop入门实践之从WordCount程序说起
这段时间需要学习Hadoop了,以前一直听说Hadoop,但是从来没有研究过,这几天粗略看完了<Hadoop实战>这本书,对Hadoop编程有了大致的了解.接下来就是多看多写了.以Hado ...
- Linux/Unix笔记本
Linux介绍 Linux入门——个人感想 Google怎么用linux 初入Linux Windows XP硬盘安装Ubuntu 12.04双系统图文详解 实例讲解虚拟机3种网络模式(桥接.nat. ...
- lamp环境编译(apache2.4.7 php5.4.25 mysql 5.5.23)
环境要求 gcc.gcc-c++.cmake.bison(可能)支持 1.yum install gcc gcc-c++ cmake bison 2.修改yum配置,达到搜索本地设置 移走或改名/et ...
- How To Set Up Apache Virtual Hosts on CentOS 6
About Virtual Hosts 虚拟主机,用于在一个单一IP地址上,运行多个域.这对那些想在一个VPS上,运行多个网站的人,尤其有用.基于用户访问的不同网站,给访问者显示不同的信息.没有限制能 ...
- iOS中 项目开发易错知识点总结
点击return取消textView 的响应者 - (BOOL)textFieldShouldReturn:(UITextField *)textField { [_contactTextFiled ...
- PHP获取客户端真实IP的自定义函数
<?php //虽然使用 $_SERVER[REMOTE_ADDR] 也可以获取,但是要获取真实的客户端IP地址,需要使用下面的方法: function _getIP(){ $ip=getenv ...
- C++ Template Operator
#include <iostream> #include <string> #include <deque> #include <stdexcept> ...