Minggu, 29 Oktober 2017

Pembuatan Garis dengan OPENGL Menggunakan Bahasa Pemrograman JAVA

Apa itu OpenGL dan OpenGL-ES?


OpenGL adalah kumpulan standard API (Application Programming Interface) yang menghubungkan software dengan hardware grafis untuk menampilkan gambar 2D dan 3D. Intinya OpenGL itu adalah kumpulan library untuk mengakses hardware (GL= graphical library).  OpenGL mendefinisikan berbagai instruksi untuk menggambar objek, image (umumnya 3D) dan melakukan berbagai operasi terhadap objek-objek tersebut. OpenGL tidak mengandung source code, hanya spesifikasi saja. Pembuat GPU (graphical processing unit) seperti NVIDIA, Intel, Samsung dll yang akan membuat implementasi.  Dengan cara ini walaupun GPU diproduksi oleh berbagai produsen dengan berbagai berbagai variasi tipe dan implementasi, semuanya dapat diperintah dengan spesifikasi yang sama. Kebayang kan repotnya kalau setiap produsen punya spesifikasi yang berbeda: game ini hanya dapat dijalankan di NVIDIA saja, game yang itu hanya di Intel saja dst.
OpenGL dirancang independen terhadap sistem operasi, hardware, maupun bahasa pemrograman yang digunakan. Bahkan jika GPU tidak tersedia, openGL dapat dijalankan diatas software yang mengemulasi hardware,  tentu dengan kinerja yang  lebih rendah.
OpenGL dikembangkan mulai dari tahun 90-an  dan saat ini telah menjadi standard industri. OpenGL ada hampir disemua platform: Windows, Linux, Mac, smartphone, game console, avionic dan berbagai embedded system. Dari sisi software, OpenGL digunakan untuk berbagai macam hal mulai dari game, visualisasi, simulasi, CAD (Computer-Aided Design) sampai editing video dan image.
Standard yang ada di OpenGL dikelola oleh konsorsium yang berisi berbagai pihak yang berkepentingan dengan computer grafis.  Konsorsium itu disebut Khronos yang anggotanya  antara lain: AMD, Intel, NVIDIA, Apple, ARM,  Nokia, Qualcomm, Samsung, Sony, Epic Games.   Khronos juga mengelola standard lain seperti OpenCL, OpenVG  dan WebGL.
OpenGL adalah low level API, jadi saat kita menggambar suatu objek kita harus mengirimkan terlebih dulu objek, texture,  shaders dan lainnya. Ini membuat programming dengan OpenGL bisa jadi hal yang rumit, tapi disisi lain jadi lebih powerfull dan fleksibel.  Bagi pemula hal ini bisa memusingkan karena terdapat banyak variasi teknik yang dapat dilakukan untuk mencapai hasil yang sama.  Umumnya pengembang game tidak menggunakan openGL secara langsung, tetapi melalui game engine seperti Unity.
OpenGL terus berkembang dan semakin lama semakin ‘gemuk’ dan kompleks sehingga pada di versi 3, fungsi-fungsi yang dianggap sudah tidak dibutuhkan lagi (deprecated) dibuang. Tapi karena penolakan beberapa vendor seperti NVIDIA, maka di versi 3.2 diperkenalkan dua profile: pertama core profile yang seperti versi 3 membuang bagian yang deprecated dan versi kedua adalah compatibility profile yang tetap compatible sampai dengan OpenGL versi 1.  Bagi pemula, dianjurkan untuk belajar core profile  yang walaupun lebih rumit daripada  versi openGL sebelumnya, tetapi lebih aman untuk masa depan saat spesififikasi  yang deprecated benar-benar dibuang.
Jika kita menggunakana Java, ada dua library yang dapat digunakan LWLJGL  dan JOGL.  Kinerjanya relatif sama, jadi tinggal masalah selera saja.  Saya pribadi lebih memilih LWLJGL.
OpenGL ES
OpenGL ES adalah versi OpenGL untuk embedded system  dan mobile device khususnya untuk iPhone dan Android. Untuk ‘merampingkan’ OpenGL ES,  API OpenGL yang jarang digunakan atau terlalu kompleks dibuang.
OpenGL ES 2.0 memiliki kemiripan dengan OpenGL 3.0, tetapi ada beberapa fitur yang belum disupport seperti: glMultiDrawElements, glDrawRangeElements, antialiased lines polygon smooth, polygon antialiasing, multiple polygon modes, depth textures, rectangle textures, dan array textures. OpenGL ES 2.0 juga hanya dapat menggunakan vertex dan fragment shader.
Seperti halnya OpenGL 3, OpenGL ES 2.0 adalah versi yang tidak kompatible dengan versi sebelumnya (OpenGL ES 1).  Bagi pemula, dianjurkan langsung mempelajari versi OpenGL ES 2.0 ini.  Tetapi jika tujuannya hanya untuk membuat game,  sebaiknya menggunakan library seperti LibGDX yang menyederhanakan penggunaan OpenGL ES.
sumber: OpenGL superbible (Wright dkk) & OpenGL programming guide (Shreiner dkk)
Artikel selanjutnya: OpenGL dan Java
Update: Sebaiknya jangan belajar langsung ke OpenGL kecuali benar-benar diperlukan, seperti membuat game engine sendiri, atau membuat custom aplikasi grafis yang membutuhkan kinerja tinggi. Untuk awalnya, bisa menggunakan framework seperti LibGDX yang mempermudah pembuatan game atau simulasi tapi kalau perlu bisa mengakses API OpenGL langsung. Tutorialnya tersedia di blog ini (untuk Android, tapi bisa dijalankan di desktop juga).

Pembuatan menu garis dengan OPENGL menggunakan java