|
|
Artik OpenGL nin ne oldugunu ogrendigimize gore yavas yavas OpenGL kodu yazmaya baslayabiliriz.Bu derste derleyicinizle beraber OpenGL yi nasil kullanacginizi ogrenebileceksiniz,bunu yaparken OpenGL kodlamasinda kullanilan fonksiyon ve degiskenlerinde standard isimlendirmesini ogrenecegiz.Sayet simdiye kadar bir OpenGL programi yazdi iseniz bunu kendi kendinize zaten farketmissinizdir.
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:
#include<windows.h> #include<gl/gl.h> #include<gl/glu.h>
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.
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.
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.
OpenGL fonksiyonlari asagidaki ornek yapiya uyarlar:
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.
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.
|
|