您的位置:首页 > 编程语言

高级图形编程(基于opengl)8

2015-01-14 23:56 246 查看

二.3D转换

OpenGL可以简单而且强大的转换模型的功能。顶点创建可能包括位置,法线向量和设置纹理坐标。这些值操作一连串的转换(位置,旋转,缩放,和裁剪的一系列线性组合)在应用程序里设置。在OpenGL里使用4X4的矩阵表示基本的转换。应用程序操作转换,在图形管线中沿着两个位置和纹理坐标之间细分插值的功能,以及应用程序提供更多的控制。这一章介绍OpenGL转换管线,假设需要更深入的了解它,讨论转换会影响视觉效果的精度。

2.1数据表示法

描述转换机制之前,我们介绍转换后的数据表示法。OpenGL代表顶点坐标,纹理坐标,法线向量和颜色一般叫做元组。元组可以是4相向量。当使用1D,2D,和3D会默认补全后面的值(如顶点坐标,W设置为1)。OpenGL转换使用4X4矩阵表示,平面方程使用4相元组等。

2.2转换流水线概述

OpenGL转换流水可以看做是在应用程序里面设置的一系列的笛卡尔坐标系空间的转换(如图2.1)。五个空间包括:物体空间,从应用程序里获取的坐标,眼睛空间,场景显示区域,裁剪空间,它确定几何体哪些将在场景中可见,NDC空间,规范空间区域产生透视区域,和窗口空间,映射到屏幕窗口像素的位置。在下面部分我们要介绍在流水线中的每个空间,转换方法,以及他们在流水线中出现的顺序。

2.2.1物体空间和视点转换

流水线开始于由应用程序发出的纹理,顶点和光照位置坐标,以及法线向量。这些未转换的值就是在模型空间。当应用程序启动自动生成纹理坐标的功能,他们可以从未转换顶点位置创建。
物体空间坐标转换到视角空间的使用到的内容叫做视点矩阵。它通常是指模型到一个连贯的场景视图的过程有着独特的优势,就像他的名字说的那样,视点矩阵完成观察视图和模型系统之间的转换。
在模型转换中定义在场景中模型的位置和姿态。他的转换中把所有的基元组合成的一个模型叫做一个组。一般来说,每一个模型在场景中可能都需要一个不同的模型转换到一个正确的位置。激活一个模型,在场景每次重绘是都要更新它的模型转换。
视图转换是在相机在场景中位置和姿态变换。转换后的场景就是眼睛空间。通常每帧更新一下。
由于视点矩阵包括视图转换和模型转换两部分,当其他转换需要变换时它必须也要更新。视图矩阵是由模型转换(M)乘以视图转换(V),缩写VM。通常应用程序使用OpenGL做乘法,首先加载的是视图转换,然后乘以一个模型转换。未了避免视图转换每次计算转换时重复加载,应用程序可以使用OpenGL矩阵栈操作。栈可以推入一个当前模型矩阵或移除它。为了避免重复加载视图矩阵,应用程序可以先把它加入到栈中,然后重复用椎栈操作任何其他模型转换到里面。

一个重要的使用是视点矩阵修改OpenGL的光源。当这个光源位置是使用glLight命令,位置和方向应该在视点矩阵之前相乘。转换后的位置用于光照计算,直到得到一个新的glLight命令。当光照位置在场景中是固定的(在房间里面的一个灯),然它的位置必须必须每次视图转换变换时重新计算。另一个方面,灯光可能相对固定的视点(一个车的灯在驾驶员的角度看)。在这些情况,灯光位置是在视图转换之前指定的。

2.2.2
眼睛空间和投影转换

眼睛空间坐标系统就是为了对象光照应用到眼睛空间纹理坐标产生的。OpenGL有某些关于眼睛空间的先决条件。观察者的位置是界定为眼睛空间坐标系系统的原点。观察者的方向被认定为Z轴,观察者的上方向是Y轴(如图2.2)。

法线在被应用在眼睛空间的流水线中,当光照是开启时,他们使用光照公式--连同眼睛位置和光照位置--去修改当前顶点颜色。投影转换是转换剩下的顶点和纹理坐标到这个裁剪空间。当投影转换转换它在空间内,则转换顶点的w值将被修改。,

2.2.3
裁剪空间和透视分割

裁剪空间是所有对象或者对象的部分在视图外面的部分被裁剪掉。如是:

−wclip
≤ xclip ≤ wclip

−wclip
≤ yclip ≤ wclip

−wclip
≤ zclip ≤ wclip

当裁剪产生新的顶点,这个新的顶点需要设置纹理坐标和颜色是由插值产生。精确的视图形状取决于投影转换的类型;一个透视转换返回一个截头椎体,还有一个正交投影将创建一个平行六面体。

透视分割--把裁剪空间x,y和z坐标每个点的w值价值用于裁剪转换为规范设备坐标空间(NDC)。透视分割的效果取决于一个点在裁剪空间的W是1或在不是。

2.2.4 NDC空间和视口转换

.

标准化设备坐标或NDC空间是一个显示器的显示坐标系统;它包含一个x,y和z轴取值为—1到1的立方体。即是裁剪空间的裁剪视图区域,NDC空间可以认定为这个定义空间的空间体积。

当前视图转换是应用于每一个顶点坐标转换到窗口空间坐标。按照惯例,这个转换z轴我们称之为深度而不是z。这个视图窗定义的原点,宽度,和高度值是像素。

2.2.5 窗口空间

窗口坐标系是在帧缓冲区中的基元到像素位置。初始x和y坐标系七点是在窗口对应像素的左下角;z坐标是观众到屏幕的距离。所有的z值保留为可见性测试。每个z坐标比例从0(最靠近观众)到1(距离观众最远),定义为深度缓存。

屏幕空间这个术语也是用于描述这个空间。区别是屏幕坐标系是像素坐标系在整个显示屏幕上,而窗口坐标系是像素坐标系在一个窗口的屏幕(假设这个窗口系统存在主机上)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: