JOGL Ne ola ki?

JOGL adı üstünde Java OpenGL kütüphanesidir. Bu kütüphane Bilgisayar Grafiği programlayanların Java'yı ve dolayısıyla nesne yönelimli yaklaşımı kullanmasını sağlar.

Kullanmadan önce nasıl kuracağımızı görelim
  1. JOGL sitesinden windows için gereken dağıtımı indirelim. Ayrıca eğer JOGL belgesini indirirsek geliştirmede çok faydalı olabilir.
  2. Daha sonra geliştirme ortamımızın kullandığı Java SDK/JRE dizinini tespit edelim.
  3. Zip dosyası içerisindeki dll dosyaları yukarıda tespit ettiğimiz dizin içerisindeki bin altına kopyalayalım.
  4. jar dosyalarını ise lib/ext dizini altına kopyalayalım. (Bende Eclipse E:\jdk\jre konumunu kullanıyordu, bu yüzden dll dosyalarını E:\jdk\jre\bin, jar dosyalarını ise E:\jdk\jre\lib\ext dizinine kopyaladım.)
Eclipse kullananlar için alternatif kurulum yöntemi bu dosyaları projenin kütüphanesi olarak tanıtmaktır. Aşağıda bu yöntemin aşamalarını görebilirsiniz:

1. JOGL sitesinden kullandığımız işletim sistemine uygun dağıtımı indirelim.
2. Eclipse içerisinde açtığımız lib isimli bir klasör içerisine bu sıkıştırılmış dosyadan ortama göre dll veya so dosyalarını ve ek olarak içerisindeki jar dosyalarını (sıkıştırılmış dosya içerisinde lib klasöründeki tüm dosyalar oluyor bu durumda) açalım.
3. Projeye sağ tıklayıp "Properties" seçeneğiyle (ayrıca proje seçiliyken Alt+Enter tuş birleşimi de açar) özellikler penceresini açıyoruz. Bu pencerede sol taraftan "Java Build Path" menüsünü seçiyoruz. Sağ tarafta açılan pencereden "Libraries" sekmesine geçiyoruz.










Bu sekmede sağ tarafta "Add JARs" düğmesiyle JAR seçim penceresini açıyoruz. Bu açılan pencerede workspace içerisinde projemizin lib klasörüne açtığımız gluegen-rt.jar ve jogl.jar dosyalarını seçip projeye ekliyoruz.












4. JARları ekledikten sonra native kütüphane ayarlamasını yapmak için "Libraries" jogl.jar'ı sol taraftaki ok uçlarından açıp içerisindeki "Native Library Location" bilgisini yine sıkıştırılmış dosyayı açmış olduğumuz "ProjeIsmi/lib" şeklinde seçiyoruz.









5. Bu işlemler bittikten sonra ilgili projemiz JOGL kullanabilir hale gelmiş oluyor.

Daha sonra JOGL kullanacağımız projeyi kodlamaya başlayabiliriz. Kurulumu test etmek için şu kodu deneyebilirsiniz:
import java.awt.Color;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import javax.media.opengl.GL;
import javax.media.opengl.GLAutoDrawable;
import javax.media.opengl.GLCanvas;
import javax.media.opengl.GLEventListener;
import javax.media.opengl.glu.GLU;
import javax.swing.JFrame;

public class JOGLDeneme extends JFrame implements GLEventListener {
private GLCanvas canvas;
private static GLU glu;

public JOGLDeneme() {
init();
}

private void init() {
this.setTitle("Merhaba Dünya!");
canvas = new GLCanvas();
canvas.addGLEventListener(this);
this.add(canvas);
this.setSize(300, 300);
this.setBackground(Color.WHITE);
this.addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e) {
System.exit(0);
}
});
dinleyicileriAyarla();
sahneyiOlustur();
this.setVisible(true);
}

private void dinleyicileriAyarla() {
// Bu metodta canvas uzerinde eylemleri yakaliyoruz
canvas.addGLEventListener(this);
}

private void sahneyiOlustur() {
// Burada basit sahneyi canvas uzerinde olusturalim
}

/**
* Ekrani temizler
*
* @param Temizlenecek
* GLDrawable
*/
public void clearScreen(GLAutoDrawable glDrawable) {
final GL gl = glDrawable.getGL();
// ekrani temizle
gl.glClearColor(0.5f, 0.5f, 0.5f, 1.0f); // arkaplani gri yapiyoruz
gl.glClear(GL.GL_COLOR_BUFFER_BIT); // pencereyi temizle
}

private void ucgenCiz(final GL gl) {
// rengi yesil renk olarak ayarlayalim
gl.glColor3fv(new float[] { 0.0f, 1.0f, 0.0f },0);
float x = 0.0f;
float y = 0.0f;
float length = 1.0f;
float half_length = 0.5f * length;
// bir kenarin uzunlugu veriliyor ve orta noktayi biliyoruz
// bitis noktalarini hesaplayip her koseden kenarlari ciziyoruz
float hypotenus = ((float) (half_length / (Math.sin(Math.toRadians(60)))));
float adjacent = ((float) (half_length / (Math.tan(Math.toRadians(60)))));
// Ucgeni ciz
gl.glBegin(GL.GL_POLYGON); // cizelim
// Sag ust
gl.glVertex2f(x, hypotenus);
// sol ust
gl.glVertex2f(x - half_length, y - adjacent);
// sol alt
gl.glVertex2f(x + half_length, y - adjacent);
gl.glEnd();
}

/**
* Program basladigi zaman grafik islemleri icin gereken ayarlamalar yapilir
*/
public void init(GLAutoDrawable glDrawable) {
final GL gl = glDrawable.getGL();
glu = new GLU();
gl.glMatrixMode(GL.GL_PROJECTION);
gl.glLoadIdentity();
glu.gluOrtho2D(-1.0f, 1.0f, -1.0f, 1.0f);
gl.glMatrixMode(GL.GL_MODELVIEW);
gl.glLoadIdentity();
}

/**
* Bu metod java.awt.Component.paint() metoduna benzer Canvas her yeniden
* cizileceginde cagrilir
*
*/
public void display(GLAutoDrawable glDrawable) {
// ekrani temizle
clearScreen(glDrawable);
ucgenCiz(glDrawable.getGL());
}

/**
* Ekrani yeniden boyutlandirmak icin kullanilir
*/
public void reshape(GLAutoDrawable gLDrawable, int x, int y, int width,
int height) {
final GL gl = gLDrawable.getGL();
gl.glViewport(0, 0, width, height); // viewportu guncelliyoruz
}

/**
* Program calisirken display modu degisirse
*/
@Override
public void displayChanged(GLAutoDrawable arg0, boolean arg1, boolean arg2) {
// birsey yapma
}

public static void main(String[] args) {
new JOGLDeneme();
}
}

Eğer kod hatasız derlenip, hatasız çalışır ve aşağıdaki resimdeki gibi ekranda gri arkaplan üzerinde yeşil bir üçgen çizilirse kurulum başarılıdır. Şimdi OpenGL/JOGL öğrenmeye başlayabilirsiniz.

Kaynak: https://www.cs.umd.edu/%7Emeesh/kmconroy/JOGLTutorial/
Ayrıca şurada farklı sitelere linkler bulabilirsiniz : http://yzgrafik.ege.edu.tr/%7Eugur/05_06_Spring/BG_05_06.htm
http://yzgrafik.ege.edu.tr/%7Eugur/06_07_Spring/COURSES_06_07_Spring.htm

Güncelleme: JOGL kodu güncel JOGL sürümüne göre değiştirildi.
Güncelleme 2: Eclipse projelerinde kullanım eklendi.

2 yorum:

emre dedi ki...

daha önce jogl kurmaya çalışmıştım ama dökümantasyonu çok kötü hazırlanmıştı.
anlattıklarınla direk çalıştı, teşekkürler.

jogl ile ilgili yaptığın örnekler varsa onları da bekleriz. :)

internette çok var diyeceksin belki. evet çok var ama dedim ya, anlatımı net olanı bulmak zor oluyor.

T. E. Kalaycı dedi ki...

Merhaba,
Açıkçası JOGL ile aktif olarak uğraşacak vaktim yok. Ben daha çok X3D konusuyla uğraşıyorum. Ama hani olur da vakit bulur veya başka bir nedenle JOGL örneği hazırlarsam paylaşacağımdan emin olabilirsin :)

Kolay Gelsin.