计算机图形学:基于3D游戏开发——第二章 顶点处理机制

来源:互联网 发布:人工智能项目 创始人 编辑:程序博客网 时间:2024/05/21 03:19

渲染管线:顶点处理过程——光栅化过程——片元处理过程——输出合并操作。

光栅化阶段:根据顶点对多边形加以整合,并将各个多边形转换为片元集合。片元定义为一组数据,并对颜色缓冲区中的像素进行更行。

片元处理:对各个片元进行操作(如纹理操作),进而进行各种操作确定片元的颜色值。

输出合并:片元与颜色缓冲区中的像素进行比较或合并,进而更行像素的颜色值。

 

顶点操作包括转换操作、光照操作和动画操作。本章主要探讨顶点转化操作,并介绍顶点光照方式。第5章讨论顶点光照内容,第11章阐述顶点动画方式。

2.1世界转换

2.1.1仿射转换和齐次坐标

上图中的世界转换和视见转换取决于各种基本转换:缩放、旋转、平移。

缩放和旋转为线性转换,线性转换+平移操作统称为仿射转换

 

平移操作通过向量加法描述,但是使用齐次坐标后能使用矩阵描述,所以缩放和旋转也要使用其次坐标下的矩阵形式

三维缩放矩阵——齐次坐标缩放矩阵

2D旋转矩阵——3D旋转矩阵——齐次坐标旋转矩阵

 

齐次坐标(x,y,z,w)对应于笛卡尔坐标(x/w,y/w,z/w)。齐次坐标的w项用于分辨向量和顶点数据,如果w为0,则(x,y,z,w)表示向量;否则表示顶点。

 

2.1.2世界矩阵

在右手坐标系中,比如绕Y轴旋转,箭头指向观察者,如果旋转角度为+90,则为逆时针;-90,则为顺时针。

旋转矩阵和平移矩阵相乘得到对应的4 X 4世界矩阵。左上方3 X3 矩阵表示组合线性转换,第四列表示组合平移操作。

 

2.1.3欧拉转换

当对象绕X Y Z轴进行连续旋转时,对象应具有确定方向。旋转角θx、θy、θz称为欧拉角。可以将3个旋转操作整合为一个旋转操作,该过程称为欧拉转换

R(z) * R(y) * R(x)相乘得到单一矩阵。

 

2.1.4表面法线的转换

非均匀缩放操作会使法线转换出问题。详见图2.8例子。

解决方法:使用M矩阵的逆矩阵的转置矩阵来用于法线的转换操作。

 

2.2视见转换

世界转换操作完毕且全部对象均定义于世界空间内。随后可在世界空间内确定相机。

2.2.1相机空间

根据EYE、AT、UP三个参数来确定。(相当于拍照片时确定摄影师站立的位置,眼睛位置、模特位置、头歪向的向量)

 

构建相机空间(u,v,n),n = (EYE-AT)/|EYE-AT|;u = (UP x n)/|UP x n|;v = n x u;

 

2.2.2空间转换和视见矩阵

如果全部世界空间对象都重新定义于相机空间内,那么渲染算法的实现过程就会变得简单。这个过程被称为世界空间{O,e1,e2,e3}与相机空间{EYE,u,v,n}之间的空间转换,并可通过视见转换加以实现。

 

Mview = RT;

 

Opengl中gluLookAt用于创建视见矩阵。

 

2.3 逐顶点光照

源自光源的光线将通过对象表面进行反射并于随后到达相机处。

 

2.4投影转换

 

2.4.1视见体

场景中的可见区域称为视见体

Fovy定义垂直方向的可见区域。

Aspect:宽高比

N:近剪裁面

F:远剪裁面

近裁面和远裁面不符合真是相机和人类视觉系统原理,其存在原因仅处于计算效率考量。

 

外部视见体对象不会对最终图像结果产生任何影响。如果在进入GPU管线之前丢弃此类对象,则可大大提升计算性能——视锥体剔除操作。

2.4.2 投影矩阵

投影转换将金字塔视锥体转换为轴对齐2 X 2 X 1的立方体视见体。

根据fovy、aspect、n、f四个参数可以确定一个投影矩阵

Opengl和direct3d有一点不同,就是Z轴前者(-1,1),后者(0,1).

0 0