JOGL - Transformasi
OpenGL menyediakan lebih banyak fitur seperti menerapkan warna pada objek, penskalaan, pencahayaan, memutar objek, dll. Bab ini menjelaskan beberapa transformasi pada objek menggunakan JOGL.
Memindahkan Objek di Jendela
Pada bab-bab sebelumnya, kita telah membahas program untuk menggambar garis dan menggambar berbagai bentuk menggunakan garis sederhana. Bentuk yang dibuat dengan cara ini dapat ditampilkan di lokasi mana pun di dalam jendela. Itu dilakukan dengan menggunakan metodeglTranslatef (float x, float y, float z).
Metode ini milik GLMatrixFunc antarmuka, yang ada di file javax.media.opengl.fixedfunc paket.
GLMatrixFunc Interface
interface - GLMatrixFunc
package - javax.media.opengl.fixedfunc
Tabel berikut mencantumkan beberapa metode penting dari antarmuka ini -
Sr.No. | Metode dan Deskripsi |
---|---|
1 | void glRotatef(float angle, float x, float y, float z) Memutar matriks saat ini. |
2 | void glScalef(float x, float y, float z) Digunakan untuk menskalakan matriks saat ini. |
3 | void glTranslatef(float x, float y,float z) Digunakan untuk menerjemahkan matriks saat ini. |
4 | void glLoadIdentity() Memuat matriks saat ini dengan matriks identitas. |
Itu glTranslate() Metode memindahkan asal dari sistem koordinat ke titik yang ditentukan oleh parameter (x, y, z), diteruskan ke glTranslate() metode sebagai
argumen. Untuk menyimpan dan memulihkan sistem koordinat yang belum diterjemahkan,glPushMatrix() dan glPopMatrix() metode yang digunakan.
gl.glTranslatef(0f, 0f, -2.5f);
Kapanpun glTranslate()digunakan, ini mengubah posisi komponen di layar. Oleh karena itu,reshape() metode dari GLEventListener antarmuka harus diganti dan viewport OpenGL serta matriks proyeksi harus diinisialisasi.
Kode berikut menunjukkan template untuk menginisialisasi port tampilan dan matriks proyeksi -
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();
}