GLUT Dersleri - 1
(1052 kelime) (2256 okuma)
GLUT Nedir?:
GLUT bir OpenGL uygulaması yazarken başımıza dert olan pencere açma,
kullanıcıdan girdi alma, menüleri yönetme gibi işlemleri kolaylıkla yerine
getirmemize olanak tanıyan küçük bir C/C++ kütüphanesidir. GLUT kullanarak çok az
sayıda kod satırı ile platformdan bağımsız bir biçimde yukarıda belirttiğimiz
işlemleri yapabiliriz. İster windows ister unix programcısı olun, konudunuzda en
küçük değişiklik yapmadan uygulamanızın arabirimini oluşturabilirsiniz. Daha önce
WinAPI kullanmak veya X Windows fonksiyonları ile ilgilenmek zorunda kalan programcılar
GLUT kütüphanesinin sağladığı yalın ortamı inanıyorum ki çok sevecekler. Eğer
bir OpenGL uygulaması yazmak istiyorsanız bunun en kolay yolu GLUT kullanmaktır.
GLUT 'ı Programlarımda Nasıl Kullanabilirim?:
Öncelikle şu web sitesinden çalışma platformunuz için GLUT kütüphanesinin en
son versiyonunu indirin. GLUT WIN32 sayfası Elinize en son dinamik kütüphane ve bir adet C header
kütüğü geçecek. Windows sürümü için ayrıcana glut32.lib isimli ekstra bir
kütük de elde edeceksiniz Visual C++ kullanıcıları: header kütüğü derleyicinizin
include dizinine koyun, glut32.lib isimli kütüğü ise lib dizinine kopyalayın.
Glut32.dll kütüğünü sisteminizdeki SYSTEM yada SYSTEM32 dizinlerinden birine
koyabilir yada ana çalışma dizininize (exe kütüğünün oluşturulacağı dizine)
yerleştirebilirsiniz Daha sonra bir Win32 application projesi oluşturun ve Proje için
Settings->Link menüsünden kütüphaneler kısmına "glut32.lib" i ekleyin.
Unix derleyicilerini kullanan arkadaşlar yine aynı şekilde header kütüğünü
sistemde erişebilecekleri bir yerde konumlandırmalı, glut32.a kütüğünü ise PATH
'in erişebileceği bir yere koymalıdırlar. Programlarınızda GLUT yordamlarını
çağırdığınız kütükler içerisinde "glut.h" isimli header include
edilmelidir.
Şimdi adım adım GLUT kullananarak nasıl OpenGL uygulamaları oluşturabileceğimizi
inceleyelim.
1. Kütüphaneyi Hazır Duruma Getirmek:
Bu bölümde uygulamamızın ana (main) yordamını oluşturacağız..Ana yordam GLUT
kütüphanesi kullanımı için gerekli olan temel fonksiyonları çağırıp bir pencere
oluşturduktan sonra GLUT ana mesaj döngüsüne girecek (bu konuya ileride açıklık
getireceğiz.). Tüm GLUT yordamları "glut" ön eki ile başlamaktadır. GLUT
kütüphanesini kullanmaya başlamadan önce ilk olarak glutInit isimli yordam
çağırılmalıdır. Bu yordamın tanımı aşağıdaki gibidir.
void glutInit(int argc, char **argv);
Parametreler:
- argc :: programımızın ana (main) yordamından gelen modifiye
edilmemiş argc parametresi
- argv :: programımızın ana (main) yordamından gelen modifiye
edilmemiş argv parametresi
glutInit yordamını çağırdıktan sonra sıra pencere oluşturmaya geldi. Pencereyi
oluşturmak için bir dizi yordam çağırmamız gerekmekte. Bu yordamlar ile pencerenin
konum, boyut gibi özelliklerini belirtiriz. İlk yordamımız olan glutInitWindowPosition
yordamı ile penceremizin sol üst köşesinin x ve y kordinat değerlerini veriyoruz.
void glutInitWindowPosition(int x, int y);
Parametreler:
- x :: sol üst köşenin x değeri. -1 olması durumunda
pencere yöneticisi konuma kendisi kara verir.
- y :: sol üst köşenin y değeri. -1 olması durumunda
pencere yöneticisi konuma kendisi kara verir.
Penceremizin konumunu belirttikten sonra sıra pencere büyüklüğünü bildirmeye
geldi. Bu iş için glutInitWindowSize yordamını kullanacağız.
void glutInitWindowSize(int w, int h);
Parametreler:
- w :: pencere genişliği
- h :: pencere yüksekliği
Bir sonraki adım olarak pencere görüntüleme şeklini glutInitDisplayMode
yordamını kullanarak belirtiyoruz.
void glutInitDisplayMode(unsigned int mode)
Parametreler:
- mode :: pencere görüntüleme şeklini belirten sabit
değer.
Pencere görüntüleme şekli ile ilgili değerler GLUT kütüphanesinde (glut.h
kütüğünde) tanımlanmışlardır. Bu değerleri OR işlemine sokarak bir seferde
yordama parametre olarak yollamak durumundayız. mode değeri ile kullanacağımız renk
modelini belirtebilir, double buffering kullanabilir, ya da çeşitli OpenGL
bufferlarını aktif hale getirebiliriz.
Renk modelini belirten sabitler şunlardır:
- GLUT_RGBA veya GLUT_RGB :: Varsayılan renk modeli belirtilmediği
taktirde RGBA dır.
- GLUT_INDEX :: indisli bir renk modeli seçmekte kullanılır.
Buffer'lama şeklini belirten sabitler şunlardır:
- GLUT_SINGLE :: single buffer
- GLUT_DOUBLE :: double buffer (genel kullanım için bu model
idealdir.)
Bazı OpenGL buffer larını aktif hale getirmek için aşağıdaki sabitler
kullanılmalıdır:
- GLUT_ACCUM :: accumulation buffer
- GLUT_STENCIL :: stencil buffer
- GLUT_DEPTH :: depth buffer
Örneğin genel olarak kullanabileceğimiz bir yordam çağırımı şu şekilde
olabilir:
. . .
glutInitDisaplayMode(GLUT_RGBA | GLUT_DOUBLE | GLUT_DEPTH);
. . .
Tüm bu hazırlık yordamlarından sonra glutCreateWindow yordamı ile
penceremizi oluşturuyoruz.
int glutCreateWindow(char *t);
Parametreler:
- t :: pencere başlığı
Yordamın geri dönüş değeri pencereyi belirten bir sayıdır. Bu sayıyı daha
sonra başka yordamlar içerisine parametre olarak gönderebiliriz. GLUT ile birden fazla
pencere ile çalışırken pencereleri ayırt etmekte bu sayıları kullanacağız.
Şimdiye kadar öğrendiğimiz yordamları kullanarak en basit GLUT uygulamasını
kodlayalım. Aşağıdaki kodu derleyin ve daha sonra çalıştırın.
#include <gl/glut.h>
void main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("GLUT Dersleri - 1");
}
Programı hatasız olarak derleyip çalıştırdığınız taktirde çabucak açılıp
kapanan bir pencere göreceksiniz ve programınız sonlanacak.Pencereniz içinde bir
şeyler çizdirebilmek ve bu pencereyi ekranda kullanıcı tarafından kapanıncaya kadar
tutmak için öncelikle bir render() yordamı oluşturmalı, bu yordamı GLUT sistemine
bildirmeli ve daha sonra GLUT mesaj döngüsü olarak adlandırdığımız ve GLUT
sisteminin kullanıcı girdileri ile programımızı yönlendirdiği sonsuz döngüye
girmesini sağlamalıyız. İlk olarak renderScene isimli bir yordam oluşturalım. Bu
yordam içerisinde arka fon siliniyor ve OpenGL kullanılarak ekrana bir üçgern
çiziliyor. glutSwapBuffers() yordamı ile çizim işleminin pencereye uygulanması sağlanılıyor.
...
void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex3f(-0.5,-0.5,0.0);
glVertex3f(0.5,0.0,0.0);
glVertex3f(0.0,0.5,0.0);
glEnd();
glutSwapBuffers();
}
...
Yukarıdaki yordamın ismi sizin belirleyeceğiniz herhangi bir isim olabilir. Fakat bu
yordamın pencerenize birşeyler çizilme zamanı geldiği sırada GLUT sistemi
tarafından otomatik olarak çağırılmasını sağlamak için glutDisplayFunc isimli
yordamı kullanarak fonksiyonunuzun ismini GLUT sistemine kaydettirmelisiniz.
void glutDisplayFunc(void (*func)(void));
Parametreler:
- func :: render yordamı olarak gerek duyulduğunda GLUT
sistemi tarafından otomatik olarak çağıralacak yordamın adı. Bu yordam hiç
parametre almamalı ve geriye hiç bir değer döndürmemelidir.
Son olarak yapmamız gereken GLUT sistemini daha önce bahsettiğimiz sonsuz mesaj
işleme döngüsüne sokmak. Bu işlemi glutMainLoop() yordamını çağırarak
gerçekleştiriyoruz.
void glutMainLoop(void)
Şu ana kadar anlattıklarımız eşliğinde ekrana beyaz basit bir üçgen çizdiren
GLUT uygulamasının kodunu aşağıda veriyoruz.
#include
#include
void renderScene(void) {
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_TRIANGLES);
glVertex3f(-0.5,-0.5,0.0);
glVertex3f(0.5,0.0,0.0);
glVertex3f(0.0,0.5,0.0);
glEnd();
glutSwapBuffers();
}
void main(int argc, char **argv) {
glutInit(&argc, argv);
glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA);
glutInitWindowPosition(100,100);
glutInitWindowSize(320,320);
glutCreateWindow("GLUT Dersleri - 1");
glutDisplayFunc(renderScene);
glutMainLoop();
}
Deniz Aydınoğlu tarafından www.lighthouse3d.com sitesindeki belgeden Türkçeye çevrilmiştir :: 2002
::
|