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::
|