JOGL - 变换
OpenGL 提供了更多功能,例如将颜色应用于对象、缩放、照明、旋转对象等。本章介绍使用 JOGL 对对象进行的一些变换。
在窗口上移动对象
在前面的章节中,我们讨论了绘制线条和使用简单线条绘制各种形状的程序。以这种方式创建的形状可以显示在窗口内的任何位置。这是使用方法 glTranslatef (float x, float y, float z) 完成的。
此方法属于 GLMatrixFunc 接口,位于 javax.media.opengl.fixedfunc 包中。
GLMatrixFunc 接口
接口 − GLMatrixFunc
包 − javax.media.opengl.fixedfunc
下表列出了此接口的一些重要方法 −
| Sr.No. | 方法和说明 |
|---|---|
| 1 | void glRotatef(float angle, float x, float y, float z) 旋转当前矩阵。 |
| 2 | void glScalef(float x, float y, float z) 用于缩放当前矩阵。 |
| 3 | void glTranslatef(float x, float y,float z) 用于平移当前矩阵。 |
| 4 | void glLoadIdentity() 使用单位矩阵加载当前矩阵。 |
glTranslate() 方法将坐标系的原点移动到参数 (x,y,z) 指定的点,并作为
参数传递给 glTranslate() 方法。要保存和恢复未平移的坐标系,请使用 glPushMatrix() 和 glPopMatrix() 方法。
gl.glTranslatef(0f, 0f, -2.5f);
每当使用 glTranslate() 时,它都会改变屏幕上组件的位置。因此,应重写 GLEventListener 接口的 reshape() 方法,并初始化 OpenGL 视口和投影矩阵。
以下代码显示了初始化视口和投影矩阵的模板 −
public void reshape(GLAutoDrawable drawable, int x, int y, int width, int height) {
// TODO 自动生成的方法存根
final GL2 gl = drawable.getGL().getGL2();
// 获取 OpenGL 2 图形对象
if(height <= 0) height = 1;
// 防止除以 0 的异常 height = 1;
final float h = (float) width / (float) height;
// 显示区域覆盖整个窗口
gl.glViewport(0, 0, width, height);
// 转换投影矩阵
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluPerspective(45.0f, h, 1.0, 20.0);
// 转换模型视图 gl.glLoadIdentity();
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
}

