JOGL - Chuyển đổi

OpenGL cung cấp nhiều tính năng hơn như áp dụng màu sắc cho một đối tượng, chia tỷ lệ, chiếu sáng, xoay một đối tượng, v.v ... Chương này mô tả một số phép biến đổi trên đối tượng bằng JOGL.

Di chuyển một đối tượng trên cửa sổ

Trong các chương trước, chúng ta đã thảo luận về các chương trình để vẽ một đường thẳng và vẽ các hình dạng khác nhau bằng các đường đơn giản. Các hình dạng được tạo theo cách này có thể được hiển thị trên bất kỳ vị trí nào trong cửa sổ. Nó được thực hiện bằng phương phápglTranslatef (float x, float y, float z).

Phương pháp này thuộc về GLMatrixFunc giao diện, nằm trong javax.media.opengl.fixedfunc gói hàng.

Giao diện GLMatrixFunc

interface - GLMatrixFunc

package - javax.media.opengl.fixedfunc

Bảng sau liệt kê một số phương pháp quan trọng của giao diện này:

Sr.No. Phương pháp và Mô tả
1

void glRotatef(float angle, float x, float y, float z)

Xoay ma trận hiện tại.

2

void glScalef(float x, float y, float z)

Được sử dụng để chia tỷ lệ ma trận hiện tại.

3

void glTranslatef(float x, float y,float z)

Dùng để dịch ma trận hiện tại.

4

void glLoadIdentity()

Tải ma trận hiện tại với ma trận nhận dạng.

Các glTranslate() phương thức di chuyển điểm gốc của hệ tọa độ đến điểm được chỉ định bởi các tham số (x, y, z), được chuyển cho glTranslate() phương pháp như

tranh luận. Để lưu và khôi phục hệ tọa độ chưa được dịch,glPushMatrix()glPopMatrix() các phương pháp được sử dụng.

gl.glTranslatef(0f, 0f, -2.5f);

Bất cứ khi nào glTranslate()được sử dụng, nó thay đổi vị trí của thành phần trên màn hình. Vì thếreshape() phương pháp của GLEventListener giao diện nên được ghi đè và khung nhìn OpenGL và ma trận chiếu phải được khởi tạo.

Đoạn mã sau hiển thị mẫu để khởi tạo cổng xem và ma trận chiếu:

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(); 
}