Üç Boyutlu Binaların Web Üzerinde Otomatik Olarak JOGL ile Modellenmesi
1. Giriş
JOGL, Java tabanlı OpenGL destekli grafiksel uygulamalar geliştirmek için, açık kaynak kod projesi şeklinde geliştirilip ortaya çıkarılmış bir programlama arayüzüdür. JOGL kullanılarak oyunlar, etkileşimli egitim amaçlı uygulamalar, grafiksel modelleme/tasarım yapılabilen editörler vb. geliştirilmektedir.[7] [8] [9]
JOGL'un çalısma mantıgı, C programlama dili ile yazılmış OpenGL kütüphanesine ait yordamların, arka planda JNI ('Java Native Interface') kullanılarak çagrılması çerçevesi üzerine oturtulmuştur. Dolayısıyla JOGL'un kullanılmak istendigi platform, OpenGL'in çalıstırılmasını desteklemelidir. JOGL, Java üzerinden OpenGL kullanımını saglayan Java3D, GL4Java gibi diger uygulama programlama arayüzlerinin aksine; OpenGL çagrılarını belirli bir kaç sınıfın içerdigi metodların prosedürel olarak çagrılması şeklinde kullanımına imkan vermekte; sonuçta bu tarz bir yaklaşım daha hızlı bir şekilde grafiksel görüntüleme yapılmasına büyük katkı saglamaktadır.
Yapılan bu çalısmamızda, kullanıcının belirttigi kat sayısı ve kat uzunluk, genişlik ve derinlik parametrelerine göre otomatik olarak üç boyutlu bir binanın modeli hızlı bir şekilde oluşturulmaktadır. Kullanıcılar geliştirdigimiz bu yazılım sayesinde internet üzerinde oluşturdukları bu modelleri, üç boyutlu (3B) temel dönüsüm islemlerini (tasıma, döndürme, ölçeklendirme) uygulayarak etkileşimli olarak inceleyebilmektedirler.
2. Java Tabanlı 3B İçerik oluşturma Kütüphanelerinin Karsılaştırılması
Java programlama dili ile üç boyutlu içerik oluşturmanın temelleri ilk defa 1996 yılında Intel, Silicon Graphics, Apple ve Sun firmalarının girisimiyle baslamıştır. 1998 yılı sonlarında Java3D'nin ortaya çıkısı ile baslayan süreç, 2000 yıllarında GL4Java'nın ve 2003 – 2004 döneminde Java3D'nin gelişimine ara verildigi sırada JOGL'un ortaya çıkısı ile farklı bir boyut kazanmıştır. [6]
JOGL vs. Java3D
Java'da, 3D içerik oluşturmada, JOGL öncesi kullanılan en yaygın uygulama programlama arayüzü Java3D'dir. Günümüzde Java3D ile geliştirilmis bir çok grafiksel uygulama mevcuttur. Java3D'nin çalısma mantıgı, agaç veri yapısında yer alan dügüm gruplarının genel görüntüleyici tarafından belirlenen hiyerarsik yapıya göre grafiksel içerigin oluşturulması şeklinde belirlenmistir. Bu yaklaşım, uygulama geliştiriciler açısından programlama seviyesinde kolaylık getirirken, uygulamaların çalısma hızının düsük olmasına sebep olmaktadır. Ayrıca grafiksel ögelerin oluşturulmasında OpenGL'de oldugu kadar gerçekçilik verilememektedir. JOGL, hız ve gerçekçiligin arttırılması ve uygulamalardaki belirsiz hatalar ile uyumsuzlukların giderilmesi sonucu; Java3D'nin belirtilen eksikliklerini kapatarak, 3D içerik oluşturmada daha etkin bir çözüm durumuna gelmistir.
JOGL vs. LWJGL
JOGL 'a alternatif olabilecek belli baslı uygulama programlama arayüzlerinden biri de LWJGL ('Lightweight Java Game Library')'dir.Bu kütüphane Microsoft DirectX 'in Sun Java tarafındaki karsılıgı olarak düsünülebilir. [10]
Her iki kütüphane de arka planda yapılacak bir çok isi kendi yapıları içindeçözümlemektedirler ancak LWJGL kendi pencere sistemi üzerinden çalıstıgından var olan Java uygulamaları ile birlestirilmesi pek de kolay degildir. Ayrıca JOGL, Java'nın AWT, Swing gibi bilesenleriyle rahatlıkla birlestirilerek kullanılabilir. LWJGL grafiksel bir uygulamayı geliştirmek için hazır bir paket gibi kullanılabilirken JOGL sadece grafikselögelerin görüntülenmesinde kullanılır.
Örnegin ses ve ses efekti islemleri için JOAL('Java Open Audio Library') ve girdi kontrolü (klavye, fare, oyun çubugu vb.) için JInput kütüphaneleri kullanılarak bütünsel sonuca gidilebilir. [2]
3. JOGL ile Web Tabanlı Etkileşimli 3B Uygulamalar Geliştirme
3.1 JOGL Kurulum
Geliştirilen uygulamaların çalıstırılması için yapılması gereken kurulum islemleri çogu zaman kullanıcıları ve uygulama geliştiricileri sıkmaktadır. Özellikle JOGL'un kurulumunda bu sıkıntıların yasandıgı görülmektedir. Kurulumda bazı püf noktalarının eksiksiz yerine getirilmesi gerekmektedir. [1]
Kurulum ile ilgili dosyaları projenin https://jogl.dev.java.net sitesinden indirdikten sonra asagıdaki islemler yapılarak geliştirme/test ortamı hazırlanabilir :
• İndirilen sıkıstırılmış haldeki dosya
içerisindeki sistem kütüphanelerinin
(windows için *.dll, linux için *.so uzantılı
olmak üzere) Java çalısma ortamının
kuruldugu dizin altındaki '/bin' dizini altına
kopyalanması
• *.jar uzantılı uygulama programlama
arayüzü kütüphane dosyalarının ise Java çalısma ortamının kuruldugu dizin altındaki
'/lib/ext' dizini altına kopyalanması
Örnegin windows yüklü bir makinada Java çalısma ortamının yüklü oldugu dizini C:\Java\jre1.5.0_08 olarak ele alırsak 'jogl.dll', 'jogl_awt.dll', 'jogl_cg.dll' dosyaları C:\Java\jre1.5.0_08\bin altına; 'jogl.jar' dosyası ise C:\Java\jre1.5.0_08\lib\ext altına kopyalanmalıdır.
Günümüzde 'Eclipse', 'JBuilder', 'IntelliJ', 'NetBeans'... vb. bir çok Java uygulama geliştirme editörü kullanılabilmektedir. Kullandıgımız editörden sistemimizde yüklü olan Java çalısma ortamını JOGL kurulumunda kullandıgımız çalısma ortamı olarak belirledigimiz anda, JOGL uygulamalarımızı geliştirebilecek ve test edebilecek sartlar saglanmış olacaktır.
Kurulumun basarı ile gerçeklesip gerçeklesmedigini ögrenmek amacıyla asagıdaki gibi basit bir test kodu çalıstırılabilir
“System.loadLibrary("jogl");”
Bu kod satırının, 'UnsatisfiedLinkException' gibi bir istisna fırlatması; Java çalısma ortamının sistem kütüphanelerini bulamaması sonucudur. Kurulum yeniden gözden geçirilmelidir.
3.2 JOGL Genel Sınıf Yapısı
Asagıda JOGL içerisindeki temel sınıf ve arayüzler ('interface') kısaca açıklanmaktadır :
- javax.media.opengl.GL
OpenGL'e erisim için kullanılan temel
arayüz sınıfıdır. Grafiksel içerigi tutar.
- javax.media.opengl.
GLAutoDrawable
Olay tabanlı isleme mekanizması
temelinde görüntülenme isleminin
yapılmasını saglayan arayüz sınıfıdır.
- javax.media.opengl.
GLEventListener
Uygulamada etkileşim sırasında
görüntülemeyi degistirebilecek
olayların görüntülemeye olan etkişini
saglayan arayüz sınıfıdır.
- javax.media.opengl.GLCanvas
AWT pencere sistemi üzerinden
grafiksel ögelerin görüntülenmesini
saglayan agır bir komponenti
tanımlayan sınıftır.
- javax.media.opengl.GLJPanel
Swing üzerinden grafiksel ögelerin
görüntülenmesini saglayan hafif bir
komponenti tanımlayan sınıftır.
- javax.media.opengl.GLCapabilities
Sistemde kurulu olan OpenGL üzerinden,görüntüleme asamasında
nelerin yapılması gerektigini
belirleyen sınıftır.
JOGL kütüphanesinde bunların haricinde bir çok sınıf bulunmaktadır. şekil - 1'de üç adet farklı renkteki (kırmızı, yesil ve mavi) disliçarkın JOGL kullanılarak birbirine bagımlı olarak dönme olayını örnekleyen uygulamanın ekran görüntüsü verilmistir :

Şekil 1. JOGL Gears Demo Ekran Görüntüsü
4. Web Tabanlı Üç Boyutlu Bina Modelleme
İnternetin hızlı bir Şekilde büyümesi ile birlikte kullanıcılar, günlük hayatlarındaki birçok islemlerini internet üzerinden gerçeklestirmeye baslamışlardır. Bir çok firmaürün ve hizmetlerini internet üzerinden pazarlamaktadır. Bu yaklaşım; insanların, alacagı ürün veya hizmetler için görsel yönden güçlü tanıtımları talep etmelerine ön ayak olmuştur. Böylece internet üzerinden yayınlanabilecek iki veya üç boyutlu grafiksel içerik oluşturma gereksinimlerini karsılayacak yeni yapıların ortaya çıkması saglanmıştır. Java, Java3D ve JOGL'un JApplet teknolojisiüzerinden kullanılmasına imkan saglayarak bu gereksinimi etkin bir şekilde karsılamaktadır.
İki boyutlu grafikler yıllardır internetin ve popüler yazılımların (kelime islemciler, tablolama yazılımları, sunum yazılımları) dogal bir parçası olarak kullanılmaktadır. Üç boyutlu grafikler ise;
• Bilgisayar Destekli Tasarım ve
Bilgisayar Destekli Üretim
• Bilim ve Bilimsel Görsellestirme
• Egitim ve Ögretim
• Eglence
• Reklamcılık
• Sanat
• Sanal Gerçeklik ve Güçlendirilmis
Gerçeklik gibi bir çok alanda
kullanılmaktadır. [3]
Üç boyutlu modelleme genel olarak yukarıdaki baslıkların tümünde kullanılan genel uygulamalardan biridir. 3B olarak modellenecek bir binanın var olan çizim veya modelleme programlarıyla herhangi bir birey tarafından ortaya çıkarılması çok kolay olmayan bir süreçtir.
Binaların üç boyutlu olarak otomatik bir şekilde modellenmesinde prosedürel programlama yaklaşımının kullanımı son yıllarda önem kazanmaktadır. Özellikle asagıdaki soruların tatmin edici cevaplarının elde edilmesi bu yaklaşımın dogrulugunu kanıtlayabilecek nitelikte olacaktır :
- Bu tarz uygulamalar geliştirmek için
hangi şekilde prosedürel programlama
yapmak gerekir?
- Gerçek zamanlı bina oluşumunu
saglayabilmek için geliştirilen
kapsamlı bir uygulama yeterince hızlı
sonuç üretebilir mi?
- Mimari açıdan ne kadar dogru ve
görsel açıdan ne ölçüde inandırıcı
sonuçlar elde edebiliriz?
- Gerçek zamanlı görüntülemede
prosedürel yaklaşım aynı anda bir çok
binayı farklı detay seviyesinde
görüntüleyebilecek kadar yetenekli
olabilir mi? [5]
Web tabanlı mimari görsellestirmede iki ve üç boyutlu teknolojileri bütünlestirençalısmalardan birisinde de, SVG ve X3D/VRML arayüzleri kullanılmıştır. [4]
5. Çok Katlı Üç Boyutlu Bina Modelleme Çalısması
Bu makalede örneklenen çalısma ile 3B modelleme bilgisi olmayan herhangi bir bireyin; binanın kat sayısı, her kattaki asansör ve merdiven sayısı gibi temel parametreleri kullanıcı dostu bir arayüzden girerek, otomatik olarak 3B binayı oluşturabilmesi saglanmıştır. Ayrıca fare kullanımı ile binanın herhangi bir açıdan döndürülerek görüntülenebilmesi ve klavyeden yön tusları kullanılarak binanın pozisyonunun güncellenebilmesi imkanları sunulmuştur. Böylece kullanıcı verdigi parametrelerin degismesine göre ne tip bir 3B bina modeli ortaya çıkabilecegini hızlı ve pratik bir şekilde görebilmektedir.
Geliştirdigimiz uygulamada, otomatik bina oluşturma yaklaşımı, önceki çalısmalardan farklı olarak; JOGL ile ilk defa web üzerinde uygulanmıştır.
Uygulamada şekil - 2'de gösterildigi gibi kullanıcıdan bina kat sayısı ve her bir katın uzunluk, en ve tavan yükseklik degerini belirtmesi beklenmektedir

şekil 2. Bina kat parametreleri
Kullanıcının girdigi temel parametrelerin dısında, her bir kat için istenildigi takdirde; belirtilen sayıda, kata ait hedef noktası,merdiven ve asansör yerlestirilebilmektedir. (şekil 3.)

şekil 3. Binanın ilk katı için kat parametreleri
Örnegin şekil - 3'de binanın birinci katı için 'T' harfi ile kırmızı renkte belirtilen elemanlar 2 adet hedef noktasını, 'L' harfi ile turuncu renkte belirtilen elemanlar 2 adet asansörü ve 'SC' ifadesi ile belirtilen mavi renkteki elemanlar ise merdivenleri göstermektedir. Parametrelerin dagılımı ve yerlestirilmesi kullanıcının siyah renk ile belirtilen alanı, ilgili parametre tipini seçtikten sonra tıklaması ile yerlestirilebildigi gibi; 'Random' butonuna basılarak da istenilen sayıda rastgele elemanın dagıtılması şeklinde de yapılabilmektedir. Yukarıdaki gibi ilgili parametreler girildikten sonra binanın oluşturulması istendiginde,öncelikle yukarıdaki Swing JPanel'inde yer alan parametrelerin koordinat degerleri JOGL'un koordinat sistemine göre normalize edilerek pozisyon degerleri güncellenmektedir. Bu isleme ait temel kod blogu söyledir :
X, Z eksenlerine ait normalize edilmis koordinatların bulunması :
// Z ekseni için...public float getZCoordinateValue(float floorWidth, float normalizedZ) {
float returnValue = -1;
returnValue = floorWidth * normalizedZ * 0.5f;
return returnValue;
}
// X ekseni için...
public float getXCoordinateValue(float normalizedX, float floorLength) {
float returnValue = -1;
returnValue = Math.abs((floorLength/2) - (normalizedX * floorLength));
returnValue;
}
Y ekseni için binanın her katının tavan yükseklik degeri referans kabul edildiginden bu eksende herhangi bir dönüsüm islemine gerek kalmamıştır.
Bina çiziminde öncelikle her bir kat tel kafes ('wireframe') küp şeklinde her bir kenarı farklı renkte olmak üzere çizdirilmistir. Daha sonra her bir katın kendisine ait parametreleri sırasıyla iterasyonlarla çizdirilerek sonuca ulaşılmıştır.
Bina kat sayısı kadar iterasyonda her bir katın çizdirilmesi
mainDisplayList= gl.glGenLists(1);
gl.glNewList(mainDisplayList, GL.GL_COMPILE);
for (int i = 0; i<=building.getFloorCount() - 1; i++)
{
drawFloor(building.getFloor(i));
}
gl.glEndList()
Bir katın tabanı ile çizdirilmesini örnekleyen kod blogu ('drawFloor') :
gl.glColor3d(
Math.random(),
Math.random(),
Math.random());
gl.glTranslatef(0,
building.getFloorHeight(), 0);
/*
Poligon Çizici sinifimiz
kullanilarak kat çizdiriliyor...
*/
polygonDrawer.drawWireCube(building.getFloorLength(),building.getFloorHeight(),building.getFloorWidth());
gl.glPushMatrix();
gl.glTranslatef(0, building.getFloorThick()/2 - building.getFloorHeight()/2, 0);
gl.glScalef(1, building.getFloorThick(), 1);
/*
Poligon Çizici sinifimiz kullanilarak
kat tabani çizdiriliyor...
*/
polygonDrawer.drawSolidCube(
building.getFloorLength(),
building.getFloorThick(),
building.getFloorWidth());
gl.glPopMatrix();
Dönüsüm İslemi Örnegi (Matris Kullanımı) :
gl.glPushMatrix();
gl.glTranslatef(
newPoint.getX(),
building.getFloorHeight()/
(MFTSPUtility.TARGET_SCALE_RATE*
building.getFloorHeight()/2),
newPoint.getZ());
gl.glScalef(
building.getFloorLength()/
MFTSPUtility.TARGET_SCALE_RATE,
building.getFloorHeight()/
MFTSPUtility.TARGET_SCALE_RATE,
building.getFloorWidth()/
MFTSPUtility.TARGET_SCALE_RATE);
glut.glutSolidCube(1);
gl.glPopMatrix();
Yukarıdaki kod blogunda; var olan grafiksel içerigin 'glPushMatrix' metodu ile korunmasından sonra 'glTranslatef' metodu ile x, y ve z eksenlerinde öncelikle tasıma dönüsüm islemi yapılmış ve daha sonra üç eksen üzerinde de 'glScalef' metodu ileölçeklendirme islemi gerçeklestirilmistir. Bir birim ayrıt uzunluguna sahip birim küp nesnesi bu dönüsümleri kendi üzerinde yansıtacak şekilde 'glutSolidCube' metodu ileçizdirilerek, 'glPopMatrix' metodu ile bu islemlerin basında korunan grafiksel içerik yeniden gösterilmektedir.
Asagıda, uygulamanın etkinligi için kullanılan 'Display List' teknigi örneklenmektedir :
Görüntüleme Listesi Kullanımı ('Display List')
mainDisplayList = gl.glGenLists(1);
gl.glNewList(mainDisplayList, GL.GL_COMPILE);
for (
int i = 0;
i<= building.getFloorCount() - 1;
i++) {
drawFloor(building.getFloor(i));
}
gl.glEndList();
Uygulamanın Ürettigi Farklı Bina Görüntü
Örnekleri
2 Katlı Bina Model Örnegi (şekil 4.) :
(1. Kat : 3 adet hedef noktası, 1 adet asansör)
(2. Kat : 1 adet hedef noktası, 1 adet asansör,
1 adet merdiven)

şekil 4. 2 Katlı Bina Model Örnegi
5 Katlı Bina Model Örnegi (şekil 5.) :
(1. Kat : 6 adet hedef noktası, 2 adet asansör,
1 adet merdiven)
(2. Kat : 2 adet hedef noktası, 1 adet asansör,
1 adet merdiven)
(3. Kat : 1 adet asansör)
(4. Kat : 4 adet hedef noktası, 2 adet asansör)
(5. Kat : 3 adet hedef noktası)

şekil 5. 5 Katlı Bina Model Örnegi
6. Sonuçlar
6.1 Grafik Arayüzlerinin Karsılaştırılması
Uygulama geliştirilirken JOGL dısındaki grafiksel içerik oluşturma kütüphaneleri ve teknikleri gerçeklestirim sırasında kullanılan teknikler bazında irdelenerek karsılaştırılmıştır. Elde edilen sonuçlar belirlenen baslıklar açısından Tablo - 1'de listelenmektedir :
Tablo 1. - JOGL, Java3D, OpenGL kütüphanelerinin karsılaştırılması
| JOGL | Java3D | OpenGL | |
| Grafiksel İçerik Kalitesi | Çok İyi | İyi | Çok İyi |
| Görüntüleme Hızı | İyi | Orta | Çok İyi |
| Programlama Kolaylıgı | İyi | Çok İyi | Orta |
| Platform Uyumlulugu | İyi | İyi | Çok İyi |
| Web Yayınlama Kolaylıgı | Çok İyi | Çok İyi | Az |
| Farklı Uygulamalarla Ortak Çalısabilme | İyi | İyi | Çok İyi |
Gerçeklestirilen bu uygulama sonucunda JOGL'un web tabanlı üç boyutlu içerik oluşturmada gayet basarılı oldugu anlaşılmıştır. OpenGL ve Java ortamlarının birlestirilerek web üzerinden kullanılabilmesini saglaması, bir çok projenin daha çok kişiye; çok daha hızlı bir şekilde ulaşabilmesini saglayacaktır. Java geliştiricileri üç boyutlu grafiksel programlamayı rahatlıkla kullanabileceklerdir.
6.2 Programın Web Tabanlı Bina oluşturma Sürecine Etkişi
Özellikle, üç boyutlu etkileşimli olarak geliştirilen grafiksel uygulamaların webüzerinden kullanılması, anlatılmak istenen konuyu; bu konu hakkında hiç bir bilgisi olmayan kullanıcılara dahi kolay bir şekilde sunabilmesi bakımından önemli bir hale gelmistir.
Geliştirilen uygulama Java'nın 'Web Start' teknolojisi kullanılarak internet üzerinden kullanılabilir hale getirilmistir. http://yzgrafik.ege.edu.tr/projects/MFVis adresinden uygulama etkileşimli olarak kullanılabilir. Bu yaklaşım, çözümün daha hızlı ve kolay bir şekilde kullanıcıya sunulması bakımından önemlidir. Günümüzde bir çok uygulama web hatta mobil tabanlı çalısabilecek şekilde geliştirilerek bilgiye erisimdeki sınırların kalktıgı örneklenmektedir.
Kullanıcıların, istedikleri bir bina modelini, internet üzerinden kolaylıkla oluşturabildikleri gözlemlenmistir. Yazılım geliştiriciler açısından ise, OpenGL altyapısının kullanılması sayesinde çok karmasık modeller hızlı bir şekilde oluşturularak, üzerlerinde islemler yapılabildigi anlaşılmıştır.Çalısmamızda, desen kaplama (‘Texture Mapping’), hazır 3B model yükleme (‘3D Object Loading’) ve karmasık aydınlatma (‘Illumination Effects’) gibi modüllerin eklenmesi asamasına gelinmistir. Böylece uygulama, mimari ve görsel açıdan daha gerçekçi bina modellerini de destekleyecektir. Arka planda OpenGL kullanılması, gerçekçiligi ve hızı arttırırken; nesneye dayalı programlama yaklaşımı da programlama asamasında harcanan çabayı minimum düzeye indirerek daha etkin bir şekilde uygulama geliştirilebilmesini saglamaktadır. Buözellikleri sayesinde, gelecekte JOGL'un kullanım oranı artacak ve degisik alanlardaki yazılım geliştiriciler tarafından tercih edilecektir.
7. KAYNAKLAR
[1]. Canroy, K., JOGL : A Beginner's Guide
and Tutorial, 2 Eylül 2004.
[2]. Twilleagear, D., Kesselman, J., Goldberg,
A., Petersen, D., Soto, C. J., Melişsinos, C.,
Java Technologies for Games.
[3]. Ugur, A., Bilgisayar Grafikleri Ders
Notları, EGE Üniversitesi, Bilgisayar
Mühendisligi Bölümü, 2002 – 2003.
[4]. Wei, Y., Integrating web 2D and 3D
technologies for architectural
visualization: applications of SVG and
X3D/VRML in environmental behavior
simulation, Web3D 2006: 11th International
Symposium on 3D Web Technology, 2006.
[5]. Whelan, G., Automatic Building
Generation, Institute of Technology
Blanchardstown, Graphics and Gaming
Group, 2006.
[6]. Xu, Z., Yen, Y., Chen, X. J., OpenGL
Programming in Java .
[7]. JOGL : Java Bindings for OpenGL,
https://jogl.dev.java.net
[8].Nehe Productions,
http://nehe.gamedev.net
[9].OpenGL,
http://www.opengl.org, SGI
[10]. Sun Developer Network,
http://java.sun.com, Sun Microsystems
Hazırlayan : Aybars UGUR, Eray HANGÜL, Tahir Emre KALAYCI, Dogan AYDIN
- Yorum yazmak için giriş yapın veya kayıt olun