在BlackBerry上使用OpenGL绘图(六):3D变换介绍

6 3D变换介绍

以上通过简单地复制OpenGLDemo中的glRotatef方法实现了3D模型的旋转。然而,为了在自己的程序中得心应手地实现各种复杂的运动,仅仅复制样例代码是不够的,读者需要更深入一层地了解OpenGL中的变换方式。

OpenGL中的基本变换方式有视图变换、模型变换、投影变换和视口变换等。简单的说,视图变换相当于设置观察点位置和方向,模型变换相当于改变模型的大小、位置、方向等,投影变换用于指定模型投影在屏幕上的方式,视口变化用于指定屏幕的大小比例等。

在OpenGL中大多数变换是通过矩阵实现的,进行变换的时候将对应的矩阵通过矩阵乘法形成最终的变换矩阵,然后对模型中的所有顶点进行矩阵计算得出最终结果。为了让系统知道使用什么矩阵进行计算,程序需要通过glMatrixMode方法指定变换模式,glMatrixMode接受一个参数,这个参数可以是“GL_MODELVIEW”、“GL_PROJECTION”和“GL_TEXTURE”中的一个,分别代表“视图模型模式”、“投影模式”和“纹理模式”。设置为“视图模型模式”之后对视图和模型进行更改,设置为“投影模式”之后对模型在屏幕上的投影方式进行更改,设置为“纹理模式”之后对纹理进行操作。要注意的是设置了变换模式之后需要调用glLoadIdentity载入对应的单位矩阵,防止之前的转换矩阵对现有转换产生影,在render方法中的以下代码就加载了“视图模型模式”并载入对应的单位矩阵:

gl.glMatrixMode(GL10.GL_MODELVIEW);

gl.glLoadIdentity();

如果读者希望详细了解变换模式,建议找一些专门的书籍,先学习一些有关矩阵和矩阵计算的知识,再学习3D图形计算中矩阵的作用。对于初学者,可以简单地将glMatrixMode方法和glLoadIdentity方法看作是设置变换方式的固定语句。将变换模式设置成“视图模型变换”之后,表示后面的代码都是对视图或者是模型进行操作。

你可能感兴趣的:(BlackBerry)