[翻译]投影变换 Projection Transform (Direct3D 9)

你可以认为投影变换就是控制摄像机内部的一种方式。他可以类推为为摄像机选择一个漏字板。它是三种变换中最难懂的。本文只讨论以下的一些内容。

典型的投影变换就是缩放和透视投影。投影就变换把视椎转化为一个立方体。近大远小。这就是把透视应用于场景。

在视椎体中,摄像机与变换空间原点的距离被定义为D,所以投景矩阵看起来像这样:

观察矩阵把摄像机通过把z轴-D 平移到原点。平移矩阵如下

他们两个矩阵相乘得到以下矩阵

透视转换把视椎体转化为新的一个坐标空间。注意视堆平截变为一个立方体,原点炎右上角移动到场景的中间,如图所示

在透视变换中,x和y方向的范围是-1到1。z方向的范围是0(在平面前面),1(在平面后面)

这人矩阵平移和缩放模型是根据摄像机与截面的距离,但是目前 没有考虑到视角大小 ,并且它为远程物体产生的z值可能几乎相同,这使尝试比较变的困难。以下矩阵解决了问题,并根据 视区的纵横比调整顶点,这使它成为透视投影的一个很好的选择。

在这个矩阵中,Zn是近裁剪平面的z值。变量whQ有以下含义。注意fovwfovh表示视区在水平和垂直方向上的视角,以弧度为单位

对应用程序而言,使用视角的角度定义x和y的比例系数可能不如使用视区在水平和垂直方向上的大小(在摄像机空间中)方便。可以用数学推导,得出下面两个使用视区大小计算wh的公式,它们与前面的公式是等价的。

在这两个公式中,Zn表示近裁剪平面的位置,VwVh变量表示视区在摄像机空间的宽和高。

对于C++应用程序而言,这两个大小直接对应于D3DVIEWPORT9结构的WidthHeight成员。(译注:虽然直接对应,但是不等价的,因为VwVh位于摄像机空间,而WidthHeight位于屏幕空间)

无论决定使用什么公式,非常重要的一点是要尽可能将Zn设得大,因为接近摄像机的z值变化不大。这使得用16位z缓存的深度比较变得有点复杂。

同世界变换和观察变换一样,应用程序调用IDirect3DDevice9::SetTransform方法设置投影矩阵。

时间: 2024-11-05 07:25:50

[翻译]投影变换 Projection Transform (Direct3D 9)的相关文章

基本3D变换之World Transform, View Transform and Projection Transform

作者:i_dovelemon 来源:CSDN 日期:2014 / 9 / 28 主题:World Transform, View Transform , Projection Transform 引言 在3D图形学中,基本几何变换是一个非常重要的操作.可以说,整个3D图形能够有效的显示,就是由于几个非常重要的基础3D变换贡献的.在前面的文章中,向大家承诺了,要详细的讲解在3D图形学中的三个基本的坐标变换.今天,就来像大家讲述,DirectX是如何进行变换. 变换的目的 在我们讲解具体的变换工作之

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

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

拓幻图形学工程师教学手册(第一讲)|一字一字敲出OpenGL学习教程

动机首先申明,我是拓幻科技图形处理工程师,自己接触OpenGL,图形图像等方面也有六年多了,很多人其实并不了解这方面,也不了解如何系统地去学,我觉得基于我硕士时期的课程和经验给大家.这些资料和经验也得感谢我的老师,来自普渡大学的终生教授迈克 贝利(Mike Bailey). 以此连载OpenGL学习教程,给大家讲解,一起学习一下,不对之处,欢迎大家指出讨论. 所有渲染工作都离不开OpenGL, 着色器(Shader)这些,如果你和我一样对图形处理比较感兴趣的话,可能你和当初的我有着同样的困惑:如

WebGL简易教程(五):图形变换(模型、视图、投影变换)

目录 1. 概述 2. 详论 1) 模型变换 (1) 平移变换 (2) 缩放变换 (3) 旋转变换 (4) 组合变换 2) 视图变换 (1) 原理 (2) 推导 3) 投影变换 (1) 透视投影 (2) 正射投影 3. 综合运用 4. 参考 1. 概述 通过之前的教程,对WebGL中可编程渲染管线的流程有了一定的认识.但是只有前面的知识还不足以绘制真正的三维场景,可以发现之前我们绘制的点.三角形的坐标都是[-1,1]之间,Z值的坐标都是采用的默认0值,而一般的三维场景都是很复杂的三维坐标.为了在

OpenGL ES 简单教程

什么是OpenGL ES? OpenGL ES (为OpenGL for Embedded System的缩写) 为适用于嵌入式系统的一个免费二维和三维图形库. 为桌面版本号OpenGL 的一个子集. OpenGL ES 定义了一个在移动平台上可以支持OpenGL最基本功能的精简标准.以适应如手机.PDA或其他消费者移动终端的显示系统. Khronos Group 定义和管理了OpenGL ES标准. OpenGL 与 OpenGL ES的关系OpenGL ES 是基于桌面版本号OpenGL 的

Directx9.0 学习教程5 光照

光照 1.      首先需要定义这样的顶点结构 struct CUSTOMVERTEX { D3DXVECTOR3position; // 顶点 D3DXVECTOR3normal; // 法向量 }; // Custom flexible vertex format (FVF). #define D3DFVF_CUSTOMVERTEX (D3DFVF_XYZ|D3DFVF_NORMAL) 2. 然后创建一个圆柱体顶点模型 // Create the vertex buffer. if( FA

OpenCASCADE Coordinate Transforms

OpenCASCADE Coordinate Transforms [email protected] Abstract. The purpose of the OpenGL graphics processing pipeline is to convert 3D descriptions of objects into a 2D image that can be displayed. In many ways, this process is similar to using a came

DirectX 9.0c游戏开发手记之RPG编程自学日志之五 ——Drawing with DirectX Graphics (用DirectX图形绘图)(第1节)

        本文由哈利_蜘蛛侠原创,转载请注明出处!有问题请联系[email protected]     从这一期起,我们进入了本书的第二部分,叫做DirectX Basics (DirectX基础).这一部分分为以下五个章节: 第2章 Drawing with DirectX Graphics (用DirectX图形进行绘图) 第3章 Interacting with DirectInput (与DirectInput互动) 第4章 Playing Sound and Music wit

OpenGl 坐标转换 (转载)

OpenGl 坐标转换 (转载) 1. OpenGL 渲染管线 OpenGL渲染管线分为两大部分,模型观测变换(ModelView Transformation)和投影变换(Projection Transformation).做个比喻,计算机图形开发就像我们照相一样,目的就是把真实的场景在一张照相纸上表现出来.那么观测变换的过程就像是我们摆设相机的位置,选择好要照的物体,摆好物体的造型.而投影变换就像相机把真实的三维场景显示在相纸上一样.下面就分别详细的讲一下这两个过程. 1.1模型观测变换