Bu yazý OpenGL ve onun Linux'daki
desteði hakkýnda bir yazý dizisi baþlatmaktadýr. Yazý,
uygulamalarýna yüksek performanslý 2D ve 3D grafikler
ekleme konusunda bilgi edinmek isteyen programcýlar
için düþünülmüþtür.
Hiç kuþkusuz, OpenGL , 2D ve 3D uygulamalarý geliþtirmede
üstün bir API endüstrisi olup bilimsel, mühendislik ve özel
etki geliþtirimlerinde yeðlenen bir platform olan ünlü SGI iþ
istasyonlarýný yapan Silicon Graphics IRIS GL-kitaplýðý'na
izleyicisi olabileceði düþünülmektedir. SGI, gelecek için
kolay kullanýmlý, sezgiyle anlaþýlabilen, taþýnabilir ve
network uyumlu API yapmak için OpenGL'e deneyimleri ile
destek olmuþtur. Ayný zamanda SGI'ý açýk sistemlerin önemini
farkettikleri için kredilendirebiliriz. Birçok yazýlým ve
donaným üreticisi geri planda OpenGL'in özelliklilendirilmesinde
rol almýþlardýr. Bu yaklaþým nedeniyle, OpenGL uygulamalarý;
kiþisel bilgisayarda windows95'den, görkemli linux sistemimize,
UNIX iþ istasyonlarýndan, anayapý süperbilgisayarlara, piyasada
bulunan tüm platformlara kolaylýkla yerleþtirilebilmektedir. Mimari Ýnceleme
Kurulu deðiþiklikleri onaylayarak ya da geri
çevirerek veya uygunluk testleri öngörerek OpenGL
özelliklilendirilmelerini denetim altýnda tutmaktadýr.
SGI'ýn eski IRIS GL-kitaplýðýnýn tersine, OpenGL taslak
olarak platform ve iþletim sisteminden baðýmsýzdýr. Network'u
algýlayabildiði için OpenGL uygulamasýný bir sunumcu ve
çoðunlukla grafikleri görüntüleþtiren bir istemciye
ayýrmak mümkündür. OpenGL komutlarýný network üzerinden sunumcu
ve istemci arasýnda kullanmak için bir protokol vardýr. Sunumcu
ile kullanýcýnýn ayný tür platformda çalýþma zorunluluðu
olmamasýný saðlayan iþletim sistemi baðýmsýzlýðý da büyük bir
avantaj olarak gözükmektedir. Çoðunlukla, sunumcu karmaþýk bir
simülasyon çalýþtýran bir süper bilgisayar ve istemci de grafik
görüntülemeye tahsis edilmiþ basit bir iþ istasyonudur.
Bütün bunlardan baþka OpenGL veriyollulaþtýrýlmýþ, yüksek
performanslý grafik görüntüleþtirme kitaplýðý olmakla birlikte
OpenGL'in enbasitögelerini donaným düzeyinde devreyesokan
grafik hýzlandýrýcý kartlar ve özelyapýlý 3D kartlarý da vardýr.
Yakýn zamana kadar bu geliþmiþ grafik kartlarý çok pahalýydý
ve sadece SGI iþ istasyonlarý ile diðer UNIX iþ istasyonlarý
için olanlarý bulunmaktaydý. Herþey çok çabuk deðiþiyor!
Silicon Graphics'in cömert lisanslarýna ve sürücü geliþtirme
programlarýna teþekkürler.Böylece kiþisel bilgisayar kullanýcýlarý
için çok daha fazla OpenGL donanýmý göreceðiz. Linux
kullanýcýlarý bu fýrsattan hoþnut olabilirler. Evet 3Dfx
Interactive adýnda bir firma bir seri 3D grafik kartý ve
Kayar Kitaplýk Linux Ýþletim sistemine destek sunmaktalar.
Bu yazý dizisinde Philip Ross (
3Dfx
Grafik Katlarý bizim iþimizde kullanacaðýmýz 3Dfx grafik
kartlarýný ayrýntýlarýyla anlatmaktadýr. Bu, Linux pazarýnýn
burada kalýcý olduðunu anlayan bazý donaným üreticilerinde büyük
bir tutum deðiþikliðine neden olmuþtur. Linux taraftarlarý bu
tür atýlýmlara destek olmalýlar ya da bunlarý özendirmelidirler.
OpenGL'in donanýmdan baðýmsýz olmasýný saðlamak için;
kullanýcý girdisini saðlamak için kullanýlan komutlar ile pencere
iþlemleri için kullanýlan komutlar devre dýþý býrakýlmýþtýr.
Bu OpenGL kullanýmý için büyük bir kýsýt gibi görünebilir.
Fakat ilerde göreceðimiz (Bakýnýz
GLUT Programlama Serisi), gibi OpenGL'i pencere iþlemlerini
ve kullanýcý giriþleriyle ilgilenecek diðer esnek program
kitaplýklarýyla birleþtirmek mümkündür. Ayrýca, OpenGL zor
modellemeler (moleküller, uçaklar, evler, kuþlar vb) için hiçbir
komut bulundurmaz. OpenGL'de sadece çok basit geometrik cisimler
bulunur (nokta, doðru ve çokgenler). Program geliþtiren kiþi
modellerini bu birkaç basit cisimi kullanarak oluþturmalýdýr.
Daha karmaþýk modelleri yapmaya olanak saðlayan OpenGL'le iliþkili
kitaplýklar da bulunmakta olup herhangibir kullanýcý bu
kitaplýklarý kendi modellerini yaratmak için kullanabilir.
OpenGL ile ilgili bu yazý dizilerimizde OpenGL için en
yaygýnbilinen C arayüzünü kullanacaðýz. Bununla birlikte okuyucu
baðlayýcýlarýn diðer diller : FORTRAN, C++, Ada ve Java
için de kullanýþlý olduðunu bilmelidir. Dizimizin sonraki
yazýlarýnda, okuyucu OpenGL için C arayüzüne alýþtýktan sonra,
Open-Inventor'dan : OpenGL'e C++ kitaplýðýndan bir uzantý'dan
sözedeceðiz.
Aþaðýdaki yazý fazla ayrýntýsýna girmeden OpenGL'in yerine
getirdiði bazý özellikleri anlatmaktadýr.
-
Geometrik Enbasitögeler Nesnelerin matematiksel tanýmlamalarýný yapmamýzý saðlar.
Þimdiki basit enbasitögeler: noktalar, doðrular, çokgenler,þekiller ve . bitmap'lerdir;
-
Renk Kodlamasý RGBA (Kýrmýzý-Yeþil-Mavi-Alpha) 'da ya da renk kataloðunda . modunda .
-
Gözdengeçirme ve Modelleme nesneleri 3 Boyutlu ortamda düzenlemeye
kameramýzý uzayda dolaþtýrýp, gözdengeöirilecek resim için istenilen noktayý
seçmeye izin verir. ;
-
Doku Dönüþtürümü modelimizdeki çokgenlere gerçek görünüþlü yüzeyler
görüntüleyerek modelimize gerçekçilik katar.
-
Malzeme Aydünlatma tüm 3 boyutlu grafiklerin vazgeçilmez bir parçasýdýr.
OpenGL maddenin özelliklerini veren her noktanýn rengini ve odadaki ýþýk
kaynaðýný hesaplayan komutlar saðlar.
-
Çift Tamponlama animasyonlarda oluþan titremeyi gidermeye yardým eder.
Animasyonda birbirini izleyen her bir çerçeve ayrý bir bellek tamponunda
oluþturulur. Ve sadece çerçevenin görüntülenmesi tamamlandýðýnda ekranda
görülebilir.
-
Anti-aliasing bilgisayar ekranýnda çizilmiþ doðrularýn uçlarýnda
oluþan çentikleri azaltýr. Çentik uçlu doðrular genellikle düþük çözünürlükte
çizildiklerinde oluþular.
Anti-aliasing, mimari zig-zag larý azaltmak için rengi ve doðrularýn yakýnýndaki
pixellerin yoðunluðunu deðiþtirir.
-
Gouraud gölgelemesi3 boyutlu cisme düzgün bir gölgeleme uygulamak için
kullanýlan bir yöntemdir ve cismin yüzeyleri boyunca ince renk farklarý saðlar.
-
Z-buffering Üç boyutlu cismin Z koordinatýnýn izini tutar.
Z-buffer'ý 'nin; gözlemcinin cisminin yaklaþýk izini sürer.
Z-Buferring ayný zamanda saklý yüzeyin yerinin deðiþtirilmesimde önemlidir.
-
Sis, duman ve pus gibi Atmosfer Etkileri bilgisayarda þekillerin
daha gerçekçi olmasýný saðlar. Atmosfer etkileri olmaksýzýn þekiller bazen
çok sert hatlý ve gerçek dýþý gözükür.
Sis terimi gerçekten pusu, nemi, dumaný, kirliliði ya da þekillere
bir derinlik katarak basitçe hava etkilerini taklit eden bir algoritmayý
tanýmlar.
-
Alfa Birleþtirimi, çerçeve tamponunda depolanmýþ pikselle
renk birleþtirimine izin vererek, RGBA kodunun Alfa deðerini (daðýtýilmýþ
malzeme deðeri) kullanýr. Örneðin, kýrmýzý bir kutu önünde geçirgen açýk
mavi bir pencerenin çizimini düþünelim. Alfa birleþtirimi pencere
nesnesinin geçirgenliðini öylesine âenzeþtirir ki cam içinden görünen kutu
bir çingene mavisi tonuyla gözükür.
-
Ýince Metal Düzlemler ekranýn bazý bölümlerine çizim kýsýtlamasý
getirir.
-
Görüntü Listeleri çizim komutlarýnýn daha sonraki bi görýntýleþtirme
için depolanmasýna olanak saðlar. Uygun biçimde kullanýldýðýnda, görüntü
listeleri görüntüleþtirme performansýný büyük oranda yükseltebilir.
-
Çokterimlisel Hesaplayýcýlar düzgün olmayan oransal B-spline'lara
destek vermeyi saðlarlar. Bu, arada çok sayýda noktanýn kullanýmýna
gereksinim duyurmaksýzýn birkaç referans noktasý üzerinden düzgün eðriler
çizilebilmesine olanak saðlar.
-
Geribesleme, Seçim ve Gerialým özellikleri kullanýcýya ekran
üzerinde çizilmiþ bir nesnenin gerialýmý ya da ekran üzerinde bir
bölgenin seçimi iöin olanak saðlar. Geribesleme modu görüntüleþtirme
hesaplamalarýnýn geliþtirici tarafýndan elde edilebilmesine olanak
saðlar.
-
Raster enbasitögeleri (bitmap'ler and piksel dikdörtgenleri)
-
Piksel Ýþlemleri
-
Dönüþümler: dönme, ölçekleme, Ötelemelers, 3 Boyutta perspektifler,
etc.
Sözettiðimiz gibi, OpenGL'i gerçekten taþýnabilir ve platformdan
baðýmsýz yapabilmek için pencereleme sistemi ile arayüzleþen tüm
komutlarýn, sözgelimi: pencere açma, pencere kapama, pencere ölçekleme,
pnecere yenidenbiçimlendirme, imleç konumunun okunmasý; ve ayný zamanda
verigiriþ aygýtlarýyla aray¢uzleþen tüm komutlarýn (sözgelimi klavyeden
bilgi giriþi) kurban edilmesi gerekmekteydi. Bu etkinliklerin tümü
yüksek derecede iþletim sistemine baðlýdýr. Kökeninde, GL-kitaplýðý
pencere ve çevrebirim etkileþimlerinde kendi komutlarýna sahipti. Ancak,
bunlar IRIX'e (SGI iþletim sistemi) özgü bulunmaktaydý. Kendi platformunu
bilmek ve pencere etkileþimlerini özgün platformunda gerçekleþtirmek
OpenGL geliçtiricisine kalmýþ bir konudur.
SGI'dan J. Kilgard tarafýndan oluçturulan ve bu sorun üzerinde iþlevi
olan bir ek kitaplýk bulunmaktadýr. Mark, eski AUX kitaplýðýnýn (AUX
kitaplýðýnýn ne olduðunu umusamayýn, onu unutun!) yerine geçebilecek
bir GL elaygýttakýmý kitaplýðý yazdý. GLUT kitaplýðý ücrtsiz olarak
elde edilebilmektedir. OpenGL gibi GLUT'nun da, ikitabanlý
sýrýmleri yanýsýra Linux için kaynak kodlarýný bulabilmeniz mümkündür.
GLUT kitaplýðý platform'dan baðýmsýz olup pencereleme ve çevrebirimler
için ortak bir yapý sunar. Dolayýsýyla, bir OpenGL uygulamasý bir
grafik canlandýrým için bir pencere açmak istediðinde, tabandaki
pencere sistemini egemenliðine alacak biçimde GLUT komut takýmýný
kullanýir. GLUT, bir anlamda, eldeki pencereleme sisteminin (X11,
windows, Motif, vs..) pis ayrýntýlarýný geliþtiriciden saklayarak
onun eldeki iþe yani OpenGL koduna yoðunlaþmasýna olanak saðlar.
GLUT diðer bir güzel avantajý da kodunuzun platformdan baðýmsýz
olmasýný saðlamasýdýr. Kiþisel olarak, GLUT ve OpenGL kullanan
protein ve jel benzeþtirimleri yazmýþ olup herhangi bir problem
olmaksýzýn ve de bir tek makine baðýmlý satýr içermeksizin Linux-Intel,
Linux-Alpha, ya da Windows 95'te derleyip çalýþtýrmýþ bulunmaktayým.
( Zaman zaman windows 95 kullandýðýmý itiraf etmekteyim ;-)
OpenGL uygulamalarý yazmak isteyen herkese GLUT'u bir pencere
iþleyicisi olarak kullanmalarýný kuvvetle salýk veririm.
GLUT kullanýmýnýn OpenGL'i öðrenmek kadar önemli olduðunun bilincinde
olarak, bu andaki OpenGL hakkýndaki Linux
Focus serisinde, adým adým GLUT kullanýmýný ve çevrebirim
aygýtlarýnýn rahatça iþlenebilmesinin anlatýmýný içeren birkaç yazý da
sunulacaktýr.
Bu kýsa giriþi kaparken "Evrenin Ustalarýndan" bir diðerini,
Linux için Mesa adlý bir OpenGL benzeri kitaplýðý düzenle ve sabýrla
geliþtiren Brian Paul'dan sözetmeden geçemeyiz. Bu an iðin Mesa yalnýzca
yazýlýmsal görüntüleþtirme yapmaktadýr. Yani, tüm görüntüleþtirme
görevleri CPU'ya aksi halde 3 Boyutlu yetenekleri olan donanýma kalmýþ
bir konudur. Ama, Mesa içeriden devreye sokulabilen olanaklarla
hýzlandýrýlmýþ donanýmlar için sürücü yazümüna olanak saðlayabilmektedir.
Bu an için, yalnýzca Mondello, S3 Virge (sadece Win95), GLINT, ve
Voodoo 3Dfx yongatakýmlarý için sürücüler bulunmaktadýr. David Bucciarelli
tarafýndan yazýlan Voodoo sürücüsü sayesinde Mesa, pahalý SGI istasyonlarý
düzeyinde performansa ulaþabilmektedir. Dolayýsýyla, yüksek performanslý
3Boyut-hýzlandýrýlmýþ grafikle ilgilenmek istiyorsanýz gidip bir 3Dfx kart
alabilirsiniz.
Sonuçta,benim Alpha-PC (21164 550MHz 164MRam Linux 2.0.32)'im
üzerindeki deneyimimden sözetmeden geçemeyeceðim. Yazmakta olduðum bir jel
benzeþtirim programý için Mesa kitaplýðýný kullanmaktayým. Bu ana kadar
Alfa sistemleri için Glide kitaplýðýnýn piyasaya sürülmemesinden dolayý
(LÜTFEN ÇABUK OLUN!!!) sisteminde Mesa kitaplýðý için destek
bulunmamaktadýr. Neyse, Phil Ross ve ben kýsa bir süre önce onun
Pentium PC + 3Dfx'inin ve benim Alpha PC + Matrox Millennium kartýnýn
performanslarýný karþýlaþtýrdýk. Benim jel canlandýrýmýmýn benim PC'imde
onunkindeki kadar düzgün çalýþtýðýný görmek oldukça sürpriz oldu. OpenGL
demo programlarý benim PC'imde daha da iyi (kuþkusuz doku kullanmayanlardan
sözetmekteyim) çalýþmaktaydý. Diðer bir deyiþle OpenGL için donaným
desteðinin eksikliði Alfa CPU'nun acýmasýz gücý tarafýndan dengelenmekteydi.
Ýþ hakkýnda bir fikir verebilmek için, jel canlandýrýmýnýn her çerçevesinde
onbinlerce küre ve silindir ve de aydýnlatma hesaplamalarýna gereksinim
olduðundan sözedilebilir.PC üzerinde, hesaplamalarýn zavallý Intel CPU'su
için çok fazla olmasýndan dolayý, bu kadar çok sayýda monomer göremedik.
Öte yandan, Alfa'da bu tür sorun gözlenmedi. Alfa PC'mi bir 3Dfx kartý
ve Mesa için donaným desteði ile donatýlmýþ olarak görmeyi bekleyemem.
Daha Çok Bilgi Ýçin::
|