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