- JOGL 圖形形狀
- JOGL - 繪圖基礎
- JOGL - 使用 GL_Lines 繪圖
- JOGL - 預定義形狀
- JOGL 3D 圖形
- JOGL - 3D 基礎
- JOGL - 3D 三角形
- JOGL - 3D 立方體
- JOGL - 附錄
- JOGL 有用資源
- JOGL - 快速指南
- JOGL - 有用資源
- JOGL - 討論
JOGL - 變換
OpenGL 提供更多功能,例如為物件應用顏色、縮放、光照、旋轉物件等。本章介紹了使用 JOGL 對物件進行一些變換。
在視窗上移動物件
在前面的章節中,我們討論了使用簡單線條繪製線條和各種形狀的程式。這樣建立的形狀可以顯示在視窗內的任何位置。這是使用方法 `glTranslatef (float x, float y, float z)` 完成的。
此方法屬於 `GLMatrixFunc` 介面,該介面位於 `javax.media.opengl.fixedfunc` 包中。
GLMatrixFunc 介面
**介面** - GLMatrixFunc
**包** - javax.media.opengl.fixedfunc
下表列出了此介面的一些重要方法:
| 序號 | 方法和描述 |
|---|---|
| 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 Auto-generated method stub
final GL2 gl = drawable.getGL().getGL2();
// get the OpenGL 2 graphics object
if(height <= 0) height = 1;
//preventing devided by 0 exception height = 1;
final float h = (float) width / (float) height;
// display area to cover the entire window
gl.glViewport(0, 0, width, height);
//transforming projection matrix
gl.glMatrixMode(GL2.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluPerspective(45.0f, h, 1.0, 20.0);
//transforming model view gl.glLoadIdentity();
gl.glMatrixMode(GL2.GL_MODELVIEW);
gl.glLoadIdentity();
}