Hoşgeldiniz: OyunYapimi.org
 
Ara
Konular
  Üye Olun!    
Ana Menü
 Ana Sayfa
 Anketler
 Dosyalar
 Dökümanlar
 Forum
 Haber Arşivi
 WWW Linkleri
 Üye Listesi

Forumlar
Forumlarda Arama
 
[ Ara ]
Son yazilanlar

free ebooks - 2004-05-16 14:47 free ebooks...
oyun yazmak için - 2004-05-15 11:13 oyun yazmak için...
Sinus dalgası - 2004-05-14 19:21 Sinus dalgası...
Demosu yakında... - 2004-05-06 15:11 Demosu yakında......
Depth Test - 2004-05-03 20:55 Depth Test...
forum mesajlarini duzenlemek - 2004-05-03 19:34 forum mesajlarini ...
Başka Programlara Erişmek - 2004-05-03 17:44 Başka Programlara ...
Güzel bir e-book bağlantısı.. - 2004-05-03 16:06 Güzel bir e-book b...
Okyanus Dalgasi - 2004-05-03 16:00 Okyanus Dalgasi...
3d Shoot em up - 2004-05-03 15:57 3d Shoot em up...
Esnek Güç - 2004-05-03 13:32 Esnek Güç...
UltimateGameProgramming.com - 2004-05-03 12:29 UltimateGameProgra...
Function Pointer Nedir ne ise yarar - 2004-05-03 01:35 Function Pointer N...


Konu Disi


LAMER - 2004-05-10 01:58 LAMER...
anasafa yok forum var - 2004-05-08 16:01 anasafa yok forum ...
Anasayfa Kapali  Fakat.. - 2004-05-06 15:05 Anasayfa Kapali F...
Texture Arşivi - 2004-05-03 01:39 Texture Arşivi...
Yeni Kitap: Elektronik Hobi - 2004-05-03 00:29 Yeni Kitap: Elektr...
3DTURK - 2004-05-02 23:27 3DTURK...
Online Oyun - 2004-05-02 19:27 Online Oyun...


Splatt Forum

GLUT Dersleri - 1

(946 kelime)
(951 okuma)   Yazdırılabilir Sayfa




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

[ Geri Dön: OpenGL | Dökümanlar İndeksi ]





Web site Engine's code is Copyright © 2002 by PHP-Nuke. All Rights Reserved. PHP-Nuke is Free Software released under the GNU/GPL license.