C++ / OpenGL [ 01 – Giriş ]

OpenGL nasıl çalışır

mimari

Yazılım bazında rol alan OpenGL mimarisi yukarıdaki yapıya sahiptir.Tipik bir program birçok çağrıda bulunur.Bunlardan bir kısmı programcı , bir kısmı işletim sistemi ve bir kısmı da programlama dilinin kendi kütüphaneleri tarafından yapılmaktadır.Windows uygulamaları , çıktıları ekranda göstermek için Grafik Cihaz arayüzü denilen bir Windows API kullanırlar.Bu GCA(İngilizce de GDI) , pencereye yazılar yazmak , çizgiler çizmek için kullanılır.Genellikle grafik kart üreticileri GCA nın çıktı üretmek için etkileştikleri bir grafik sürücüsünü de kart ile birlikte verirler.İşte oyun oynarken bazılarınızda , grafik kartlarının problem çıkarmasının sebeplerinden biri de GCA ile kullandığınız sürücünün uyuşmaması üzerine ortaya çıkar.OpenGL nin yazılım tanımlaması ki bunu ileride siz yapacaksınız , grafik isteklerini bir uygulamadan alarak , 3 boyutlu grafiklerin renkli bir görüntüsünü oluşturur.Bu görüntünün oluşturulmasından sonar onu GCA ya vererek monitüre yansıtılmasını sağlar.Windows dışındaki işletim sistemlerinde de benzer durumlar söz konusudur ancak onlarda GCA nın yerini o işletim sistemine özgü grafik servisi almaktadır.

OpenGL API

OpenGL’nin bir programlama dili olmadığını,bir uygulama programlama arayüzü oldugunu daha onceden soylemistik.OpenGL uygulamalarimizi biz Visual C++ ile gerceklestirecegiz.Bir API olarak OpenGL C cagri standardlarini kullanir.Bunun anlami C de yazilmis programlar OpenGL fonksiyonlarini rahatca cagirabilir.Bunun sebebi bu yordamlarin zaten C ile yazilmis olmasi diger bir sebebi de bu cagrilarin arada C veya baska bir assembler dili ile gerceklestiriliyor olmasidir.

OpenGL standard bir programlama kutuphanesi olmasina karsin bu kutuphanenin bircok degisik tanimi bulunmaktadir.Gercek Microsoft yazilim tanimi opengl32.dll dinamik baglanti kutuphanesidir ve bu windows un sistem klasorunun icinde bulunur.Bircok platformda OpenGL kendi islev kutuphanesi olan GLU ile birlikte gelmektedir ki bunun Windows uzerindeki karsiligi benzer sekilde glu32.dll dir(Yine sistem klasorunde).Bu kutuphanenin icerisinde yuzey egri ve bazi ozel matris operasyonlarini yapmaya yarayan yıordamlar tanimlanmistir.

Bu gibi DLL dosyalarinda bulunan bir fornksiyonu kullanabilmeniz icin programinizin bir ithalat kutuphanesine(import library) sahip olmasi gerekmektedir.Bunlari nasil gerceklesitireceginize ileride deginecegim yalnizca bunlari gerceklestirirken soylediklerimi hatirlamayi unutmayin.Cogunuzun benim gibi Windows uzerinde calisma yapacagini umarak bu kutuphanelerden opengl32.lib ve glu32.lib in sirasiyla yukarida bahsettigimiz dll dosyalarindaki yordamlari kullanmak icin ihtiyac duydumuz ithalat kutuphaneleri oldugunu soyleyebiliriz.

KISACA OpenGL ile Microsoft araclarini kullanarak programlama yapmak isterseniz bu iki kutuphaneyi import edilen kutuphanelerin oldugu dizine kopyalamamiz gerekecek.

Tum OpenGL fonksiyonlari icin prototip(Bir fonksiyonun kullanılabilmesi icin derleyiciye verilen tanimlama) tanimlamalari,tipler,ve macrolar gl.h isimli baslik dosyasinda bulunur(header file).Ayni seklide islev yordamlarinin prototipleri ise glu.h adli baslik dosyasinde bulunmaktadir.Bu tip dosyaşar genellikle progrmlama dilinizin kuruldugu konumda bulunan include dosyasinin icinde bulunurlar.Boylelikle C kodunuz yazarken icermek zorunda oldugunuz kutuphane ve baslik dosyalarini ogrendik.OpenGL kullanan bir Windows programi icin gereken basliklarimiz:

seklindedir.gl/gl.h ve ya gl/glu.h bu dosyalarin gl adli bir klasorun icerisinde organize oldugunu gostermektedir.Klasor yerleskesine gore farklılık gosterebilir.

Donanım hızlandırması

Interaktif 3 botulu grafik uygulamalari en hizli islemcilerde bile oldukca zaman ahrcayan bir islemdir.Bu sebeple grafik karti ureticileri kartlarini,n uzerinde grafik hizlandiricilar bulundurmaya baslamistir.Bu kartlar üzerlerinde 3 boyutlu grafik uretmek icin ozellestirilmis islemciler tasirlar.Genel amacli CPU larin tersine bu islemciler 3D islemlerini onemli olcude hizlandiracak sekilde tasarlanmislardir.Eger bahsettigimiz OpenGL ithalat kutuphanelerini programiniza baglarsaniz programlariniz bilgisayarinizda bulunan 3D karinin uzerinde Windows tarafindan kullanilan surucuyu otomatik olarak kullanmaya baslayacaktir(Cogunlukla).İste bu kutuphaneleri ekleme sebebimiz budur.

Bu tanimlardan baska tanimlarda mevcuttur fakat bunlara su an deginmeyecegim.Bunlari bilmeniz simdilik oldukca yeterlidir.

OpenGL veri tipleri

Bir platformdan digerine rahatca gecis yapabilmek icin OpenGL kendi ozgun veri tiplerini tanimlamaktadir.Bu veri tiplerinin isterseniz gercek C veri tiplerine donusturebilirsiniz.Fakat varolan derleyicilerin herbirinin C deki veri tipleri icin kendi belirledigi kurallar ve hafiza kisitlamalari bulunmaktadir.OpnGL veri tiplerini kullanarak bu kisitlamalarin onune gecmeniz mumkundur bu yuzden bunlari kullanmanizi oneririm.

Asagidaki tabloda OpenGL veri tiplerini ve karsilik gelen C tiplerini goreceksiniz.Bu veri tipleri 32-bitlik Windows ortamina uyumlu ve buna bagli on takilara sahiptir.

OpenGL Veri Tipi Hafiza tanimlamasi Karsilik gelen C tipi C Literal Ontakisi
GLbyte 8-bit tamsayi signed char b
GLshort 16-bit tamsayi short s
GLint,GLsizei 32-bit tamsayi song l
GLfloat 32-bit ondalik sayi float f
GLclampf 32-bit ondalik sayi float f
GLdouble 64-bit ondalik sayi double d
GLclampd 64-bit ondalik sayi double d
GLubyte 8-bit isaretsiz tamsayi unsigned char ub
GLboolean 8-bit isaretsiz tamsayi unsigned char ub
GLushort 16-bit isaretsiz tamsayi unsigned short us
GLuint,GLenum 32-bit isaretsiz tamsayi unsigned long ui
GLbitfield tamsayi

Tüm veri tipleri OpnGL yi belirtmek icin GL ile baslamaktadir.Bazilarinda isretsiz tipi belirtmek icin u kullanilmaktadir.Bir boyutu veya renk derinligi gibi kavramlari belirtmek icin kullanilan degiskenlerde genellikle size adi verilen ozel taki kullanilmaktadir.Mesela GLsizei bir tamsayi tarafindan belritilen boyut parametresini tanimlar.Clamp takisi renk butunlugunu tanimlamak icin kullanilir ve rengin siddetini belirtir.boolean true ve false degerlerini tutmak icin(mesela isigin varligi ve yoklugu) num enumerated adi verilen ve veri kümesi tutan ve son olarak bitfield ikilik bit alanlarini tutmaya yarayan degiskenlerdir.

Bu baglamda isaretci ve dizi kavramlari farkli tutulmamaktadir.Benzer sekilde 10 luk bir GLshort dizisi

GLshort shorts[10]; seklinde ve 10 luk bir GLdouble veri tipi isaretcileri dizisi GLdouble *doubles[10]; seklinde tanimlanmaktadir.

Fonksiyon adlandırma standardları

OpenGL fonksiyonlari asagidaki ornek yapiya uyarlar:

fonksiyon
Anlasildigi üzere OpenGL yordamlari basta kütüphane takisini daha sonra yapacagi isin ozetini tasiyan bir komut kokunun tasir.Bunu takip eden sayi yordamin aldigi paramatere sayisi,ve parametrelerin genel tipidir.

Platform bağımsızlığı

OpenGL 3D grafikler uretmek icin kullanilan cok guclu ve gelismis bir API olmanin yaninda 300 den fazla komut tasir.Bu komutlar matreyla renklerinin ayarlanmasi ve yansima ozelliklerinin belirlenmesinden kompleks kordinat donusturmelerine kadar bircok islevi yerine getirmektedirler.Tum bunlari yapan OpneGL nin pencere yonetimi veya klavye ve mouse tan girdi almak gibi basit islemleri gerceklestiren tek bir komutu dahi bulunmamaktadir.Bunun sebebi OpenGL nin platformdan bagimsiz amacli gelistirilmis olmasidir.Her platformun bu isler iicn kendi komutlari zaten bulunmaktadir.

Referans ;

http://www.godoro.com/Divisions/Ehil/Mahzen/Programming/OpenGL/txt/html/document_OpenGLAPI.html

Leave a Reply

Your email address will not be published. Required fields are marked *