1.前言
计算机图形学的要点就是创建三维物体的二维图像(图像必须是二维的,因为他是在平面的屏幕上显示的)。但是,当我们决定怎样在屏幕上绘图时,必须使用三维坐标的方式考虑。
为了把一个物体的三维坐标变成屏幕上的像素坐标,需要完成以下三个步骤:
- 变换包括模型、视图和投影操作,这是通过矩阵乘法表示的。这些操作包括:旋转、移动、缩放、反射、正投影和透视投影等。一般情况下,在绘制场景时,需要组合几种变换。
- 由于场景是在一个矩形窗中渲染的,因此位于窗口之外的物体(或物体的一部分)必须裁减掉。在三维计算机图形学中,剪裁就是丢弃位于裁剪平面之外的物体。
- 经过了变换之后的坐标与屏幕像素之间必须建立对应关系,这个过程就是视口变换。
视图和模型变换一起构成了模型视图矩阵,这个矩阵作用于物体坐标,产生视觉坐标。接着,如果还指定了其他裁剪平面,用于从场景中删除某些物体或者提供物体的裁剪视图,这些裁剪平面就会在此时生效。
顶点变换的流程如下图所示:
OpenGL采用投影矩阵来完成剪裁坐标,这个变换定义了一个视景体,位于这个空间之外的物体将裁剪掉,不会在最终的场景中出现。
随后发生的是透视除法,他把坐标除以w,产生规范化的设备坐标。
最后,变换后的坐标通过视口变换成窗口坐标,可以通过控制视口的大小对最终的图像进行放大、缩小或拉伸。
2.详细理解各个变换
1. 一个例子
#include <vgl.h>
void init(void)
{
glClearColor(0.0,0.0,0.0,0.0)