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(); 
}
廣告
© . All rights reserved.