JOGL - Трансформация

OpenGL предоставляет больше возможностей, таких как применение цветов к объекту, масштабирование, освещение, поворот объекта и т. Д. В этой главе описываются некоторые преобразования объектов с помощью JOGL.

Перемещение объекта в окне

В предыдущих главах мы обсуждали программы для рисования линий и рисования различных форм с помощью простых линий. Созданные таким образом фигуры могут отображаться в любом месте окна. Это делается методомglTranslatef (float x, float y, float z).

Этот метод относится к GLMatrixFunc интерфейс, который находится в javax.media.opengl.fixedfunc пакет.

GLMatrixFunc Интерфейс

interface - GLMatrixFunc

package - 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()используется, он изменяет положение компонента на экране. Следовательноreshape() метод GLEventListener интерфейс должен быть переопределен, а окно просмотра 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(); 
}