JOGL - Transformação
OpenGL fornece mais recursos, como aplicação de cores a um objeto, dimensionamento, iluminação, rotação de um objeto, etc. Este capítulo descreve algumas das transformações em objetos usando JOGL.
Movendo um objeto na janela
Nos capítulos anteriores, discutimos os programas para desenhar uma linha e desenhar várias formas usando linhas simples. As formas criadas desta forma podem ser exibidas em qualquer local da janela. É feito usando o métodoglTranslatef (float x, float y, float z).
Este método pertence ao GLMatrixFunc interface, que está no javax.media.opengl.fixedfunc pacote.
Interface GLMatrixFunc
interface - GLMatrixFunc
package - javax.media.opengl.fixedfunc
A tabela a seguir lista alguns métodos importantes dessa interface -
Sr. Não. | Métodos e Descrição |
---|---|
1 | void glRotatef(float angle, float x, float y, float z) Gira a matriz atual. |
2 | void glScalef(float x, float y, float z) Usado para dimensionar a matriz atual. |
3 | void glTranslatef(float x, float y,float z) Usado para traduzir a matriz atual. |
4 | void glLoadIdentity() Carrega a matriz atual com a matriz de identidade. |
o glTranslate() método move a origem do sistema de coordenadas para o ponto especificado pelos parâmetros (x, y, z), passado para o glTranslate() método como
argumento. Para salvar e restaurar o sistema de coordenadas não traduzido,glPushMatrix() e glPopMatrix() métodos são usados.
gl.glTranslatef(0f, 0f, -2.5f);
Sempre que glTranslate()for usado, ele altera a posição do componente na tela. Portanto, oreshape() método de GLEventListener a interface deve ser substituída e a janela de visualização OpenGL e a matriz de projeção devem ser inicializadas.
O código a seguir mostra o modelo para inicializar uma porta de visualização e matriz de projeção -
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();
}