JOGL - Transformacja

OpenGL udostępnia więcej funkcji, takich jak nakładanie kolorów na obiekt, skalowanie, oświetlenie, obracanie obiektu itp. W tym rozdziale opisano niektóre transformacje obiektów za pomocą JOGL.

Przenoszenie obiektu w oknie

We wcześniejszych rozdziałach omawialiśmy programy do rysowania linii i rysowania różnych kształtów za pomocą prostych linii. Utworzone w ten sposób kształty można wyświetlać w dowolnym miejscu w oknie. Odbywa się to metodąglTranslatef (float x, float y, float z).

Ta metoda należy do GLMatrixFunc interfejs, który znajduje się w javax.media.opengl.fixedfunc pakiet.

Interfejs GLMatrixFunc

interface - GLMatrixFunc

package - javax.media.opengl.fixedfunc

W poniższej tabeli wymieniono kilka ważnych metod tego interfejsu -

Sr.No. Metody i opis
1

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

Obraca bieżącą macierz.

2

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

Służy do skalowania bieżącej macierzy.

3

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

Służy do tłumaczenia aktualnej macierzy.

4

void glLoadIdentity()

Ładuje bieżącą macierz z macierzą tożsamości.

Plik glTranslate() metoda przenosi początek układu współrzędnych do punktu określonego przez parametry (x, y, z), przekazane do glTranslate() metoda jako

argument. Aby zapisać i przywrócić nieprzetłumaczony układ współrzędnych,glPushMatrix() i glPopMatrix() stosowane są metody.

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

Kiedy tylko glTranslate()jest używany, zmienia położenie komponentu na ekranie. Stądreshape() metoda GLEventListener interfejs powinien zostać zastąpiony, a rzutnia OpenGL i macierz projekcji powinny zostać zainicjowane.

Poniższy kod przedstawia szablon do inicjalizacji portu widoku i macierzy projekcji -

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