8-OpenGLES理解变换

8-OpenGLES理解变换

变换:
(1)视图    ---指定观察者或者相机位置    glu.glLookup(..)
模型    ---场景中移动物体
模型视图---描述视图和模型变换的对偶性
(2)投影    ---改变可视区大小以及重新设置形状,glFrustum()
(3)视口    ---伪变换,缩放.

视图变换:

视图变换是场景所应用的第一个变换。它用于确定场景的拍摄点。在默认情况下,在透视投影中,观察者是从原点向z轴的负方向看过去(垂直“穿入”监视器屏幕)。这个观察点相对于视觉坐标系统进行移动,以提供一个特定的拍摄点。当观察点位于原点时,场景中所绘制的z值为正的物体就位于观察者的后面。

视图变换允许把观察点放在自己所希望的任何位置,并允许在任何方向上观察场景。确定视图变换就像在场景中放置照相机并让它指向某个方向。

作为总体原则,在进行任何其他变换之前必须先指定视图变换。原因是视图变换的效果相当于根据视觉坐标系统移动当前所使用的坐标系统。然后,根据最新修改的坐标系统进行其他所有的后续变换。

模型变换:

模型变换用于对模型以及模型内部的特定物体进行操纵。

8-OpenGLES理解变换

投影变换:

投影变换是在模型视图变换之后应用于物体的顶点之上的。这种投影实际上定义了可视区域,并建立了裁剪平面。裁剪平面是3D空间的平面方程式,OpenGL 用它来确定几何图形能否被观察者所看到。更为具体地说,投影变换指定了一个完成的场景(在所有的模型变换都已完成之后)投影到屏幕上的最终图像。我们学习两种类型的投影:正投影和透视投影。

8-OpenGLES理解变换

视口变换:

当上面这些操作全部完成之后,最终所获得的是场景的二维投影,将被映射到屏幕上的某个窗口。这种到物理窗口坐标的映射是最后一个完成的变换,称为视口变换。通常,颜色缓冲区和窗口像素之间存在一对一的对应关系,但并非严格如此。在有些情况下,视口变换要把一种“规范化”的设备坐标重新映射到窗口坐标。幸运的是,我们不必操心这方面的细节。


变换管线:

8-OpenGLES理解变换

                  ×模型视图矩阵                                   ×投影矩阵              透视除法                                  视口变换
源顶点数据        ----->        经过变换的视觉坐标        ---->    剪裁坐标    --->    经过规范化的设备坐标    --->    窗口坐标

最后,我们把这个坐标通过视口变换映射到一个2D平面中。

模型视图矩阵:

模型视图矩阵是个4x4的矩阵,代表经过变换的坐标系统,我们可以用这个坐标系统放置物体并设置其方向。为图元所提供的顶点按照单列矩阵的形式使用,并与模型视图矩阵相乘,将产生与视觉坐标系统相对应的经过变换的新坐标。
的下图中,一个包含了单个顶点数据的矩阵与模型视图矩阵相乘,产生了新的视觉坐标。这个顶点数据实际上由4个元素表示,包括那个额外的表示缩放因子的w值。这个值在默认情况下设置为1.0,我们很少需要自己修改这个值。
8-OpenGLES理解变换

单位矩阵:
加载单位矩阵意味着在顶点上不进行任何变换。从本质上说,它相当于把模型视图矩阵重置回原点。
glMatrixMode(GL_MODEVIEW);
glLoadIdentity();