[翻译]观察变换View Transform (Direct3D 9)

简介:

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

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

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

clip_image001

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

clip_image001[4]

旋转矩阵将角度相同但方向相反的旋转量应用于场景中建模。这个摄像机的观察矩阵包含了一个绕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示例很少使用这项优化。

相关文章
|
6月前
|
计算机视觉
【CV大模型SAM(Segment-Anything)】如何保存分割后的对象mask?并提取mask对应的图片区域?
【CV大模型SAM(Segment-Anything)】如何保存分割后的对象mask?并提取mask对应的图片区域?
【CV大模型SAM(Segment-Anything)】如何保存分割后的对象mask?并提取mask对应的图片区域?
|
图形学
Unity【Bounds & Vector3 Cross】- 如何判断一个物体是否在一个凸边体三维区域内
Unity【Bounds & Vector3 Cross】- 如何判断一个物体是否在一个凸边体三维区域内
485 0
Unity【Bounds & Vector3 Cross】- 如何判断一个物体是否在一个凸边体三维区域内
|
存储
使用Dynamic Data Display控件绘图时无法删除已经画好的曲线
最近在使用Dynamic Data Display画图的时候发现,多次画图时,之前画的图无法清除,造成图像混乱。找了好久发现这样可以消除。 在调用AddLineGraph时,使用一个全局的变量来存储这个方法返回的对象(LineGraph), 点击...
924 0
halcon模板匹配实践(2)算子find_shape_model里的参数Row, Column, Angle含义是什么?
halcon模板匹配实践(2)算子find_shape_model里的参数Row, Column, Angle含义是什么?
784 0
halcon模板匹配实践(2)算子find_shape_model里的参数Row, Column, Angle含义是什么?
|
机器学习/深度学习 算法 计算机视觉
经典论文系列 | 缩小Anchor-based和Anchor-free检测之间差距的方法:自适应训练样本选择 ​
本文介绍一篇CVPR2020的论文,它在paperswithcode上获得了16887星,谷歌学术上有261的引用次数。 论文主要介绍了目标检测现有的研究进展、anchor-based和anchor-free的背景和各自的方法差异,并提出了一种新的正负样本选择方案,用于消除这两者之间的差距。
经典论文系列 | 缩小Anchor-based和Anchor-free检测之间差距的方法:自适应训练样本选择  ​
|
Android开发
【Android 应用开发】Paint 渲染 之 BitmapShader 位图渲染 ( 渲染流程 | CLAMP 拉伸最后像素 | REPEAT 重复绘制图片 | MIRROR 绘制反向图片 )(二)
【Android 应用开发】Paint 渲染 之 BitmapShader 位图渲染 ( 渲染流程 | CLAMP 拉伸最后像素 | REPEAT 重复绘制图片 | MIRROR 绘制反向图片 )(二)
312 0
【Android 应用开发】Paint 渲染 之 BitmapShader 位图渲染 ( 渲染流程 | CLAMP 拉伸最后像素 | REPEAT 重复绘制图片 | MIRROR 绘制反向图片 )(二)
|
前端开发 Android开发
【Android 应用开发】Paint 渲染 之 BitmapShader 位图渲染 ( 渲染流程 | CLAMP 拉伸最后像素 | REPEAT 重复绘制图片 | MIRROR 绘制反向图片 )(一)
【Android 应用开发】Paint 渲染 之 BitmapShader 位图渲染 ( 渲染流程 | CLAMP 拉伸最后像素 | REPEAT 重复绘制图片 | MIRROR 绘制反向图片 )(一)
428 0
draw9patch做一个中心不变形的图片
draw9patch做一个中心不变形的图片
93 0
Dataset之图片数据增强:基于TF实现图片数据增强(原始的训练图片reshaped_image→数据增强→distorted_image(训练时直接使用))
Dataset之图片数据增强:基于TF实现图片数据增强(原始的训练图片reshaped_image→数据增强→distorted_image(训练时直接使用))
|
计算机视觉
轮廓的查找、表达、绘制、特性及匹配(How to Use Contour? Find, Component, Construct, Features & Match)
http://www.cnblogs.com/xrwang/archive/2010/02/09/HowToUseContour.html   作者:王先荣 前言    轮廓是构成任何一个形状的边界或外形线。
1926 0