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