Anasayfa Eğitseller Oyun Yapımı OpenGL ve Glut ile Programlamaya Giriş

OpenGL ve Glut ile Programlamaya Giriş PDF Yazdır e-Posta
Kullanıcı Değerlendirmesi: / 7
ZayıfEn iyi 
Eğitseller - Oyun Yapımı
Cuma, 20 Ekim 2006 19:27

Gönderen - Yazan Üye: memleket

Selam arkadaşlar;
İlk bölümde boş bir pencere yapacağız.Programımız saf Opengl kullanmıyor bunun yerine Opengl'yi GLUT kütüphanesiyle kullancağız.Peki nedir GLUT?
Kısaca bildiklerimi anlatayım:Biraz sonra yapacağımız boş pencere 35 civarı satır adetinden oluşuyor;eğer biz bu programı saf Opengl kullanarak yazsaydık işin içine Windows programlaması ve GLUT kütüphanesinin gizlediği diğer Opengl kodlarıda girecekti yani basit bir boş pencere oluşturmak bile 60 satır kodu geçebilecekti.Birazdan aşağıda göreceğiniz gibi GLUT ile bunlara gerek kalmaz.GLUT yardımcı bir kütüphanedir.Günümüzde pek çok Opengl uygulaması GLUT kütüphanesi kullanılarak yapılıyor.Çünkü gerçekten işi çok basitleştiriyor.Bir pencere oluşturmak birkaç sadece harfin altında...

BOŞ PENCERE ÖRNEĞİ

GLUT kullanmayan her Opengl programında olması gereken 2 başlık dosyası:

#<include <gl/gl.h>
#include <gl/glu.h>

Ama biz GLUT kütüphanesi kullanıyoruz ve başlık dosyası bu dosyaları zaten içerdiği için yukarıdaki gibi başlamamıza gerek yok.

#include <gl/glut.h>

-Sadece bunu yazmamız yeterli şimdilik.

Önce tam programı verelim:

#include"gl/glut.h"

void ayarlar(void)
{
glClearColor(0.0,0.0,0.0,0.0);
glShadeModel(GL_FLAT);
}

void gosterim(void)
{
glClear(GL_COLOR_BUFFER_BIT);
glFlush();
}

int main(int argc,char ** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB );
glutInitWindowPosition(0,0);
glutInitWindowSize(200,200);
glutCreateWindow("boşbirpencere");

ayarlar();

glutDisplayFunc(gosterim);
glutMainLoop();
return 0;
}

Şimdi sıra sıra açıklayalım.İlk görünüş gözünüzü korkutmasın aslında gerçekten çok basit.Gördüğünüz gibi boş bir pencere oluşturmak hiçte zor değil.Windows programlası bilenler ne demek istediğimi daha iyi anlarlar.GLUT ile programımız oldukça sadeleşti.Başlayalım.

En başta başlık dosyamızı ithal ettik.Baştaki iki tane tanımladığımız fonksiyonu anlatmaya başlamadan önce "int main(...)" kısmından sonraki kodları açıklayayım.

glutInit=Söylecek fazla birşey yok.int main içerisinde yazdığımız komut satırı argümanlarını taşıyor.Bu fonksiyonu bir kalıp olarak düşünün;her uygulamaya yazacağız.

glutInitDisplayMode=Görüntü modunu ayarlıyoruz Türkçe olarak çevirirsek.GLUT_SINGLE demişiz.GLUT_SINGLE tek tamponu ifade ediyor.İşin teknik kısmını çok iyi bilmiyorum ama inşallah ileride ekrana çizdireceğimiz hareketli cisimlere sıra gelince GLUT_DOUBLE kullanacağız.Yani çift tampon.Peki nedir tek ve çift tampon?Şunu bilmek yeterli;tek tampon kullanarak ekrana çizdirilecek hareketli bir cisim,hareketini yaparken bir titreme meydana gelir,güzel bir görüntü olmaz.Ama biz bunu çift tampon yaptığımız zaman işler düzeliyor.Tek tamponu,ekrana çizdireceğimiz hareketsiz cisimlerde kullanacağız.Hareket sırasında peşpeşe kareler geleceği için titreme meydana gelir---titreme meydana gelmez.Tek ve çift tamponun espirisi bu.Bir de GLUT_RGB ifadesini kullanmışız.RGB renk paletini ifade eder.Renksiz bir çalışma istemezsiniz herhalde değil mi?İşte bunu renkleri ifade etmek için kullanıyoruz.Zaten açılımı Red-Green-Blue yani ana renkler.Bunları karıştırıp değişik renkler elde edilebiliyor ama şimdi kullanmayacağız.

glutInitWindowPosition=Pencerenin koordinant sistemine göre ekrandaki yerini(Sol üst köşe 0,0 kabul edilir);
glutInitWindowSize=Pencerenin büyüklüğünü(piksel cinsinden);
glutCreateWindow=Oluşturulacak pencerenin ismini;
ifade eder.

Bundan sonra ayarlar() fonksiyonu;

glutDisplayFunc=Fonksiyon içerisinde başta tanımladığımız gosterim fonksiyonu var.Bu fonksiyon önemli bir fonksiyondur çünkü gosterim() içine yazacağımız cisimler bu fonksiyon ile ekrana çizilir.
glutMainLoop()=Ana fonksiyon döndüsü gibi bir anlamı var.return türünden birşey kabul edebilirsiniz.İleride zamanı geldikçe açıklayacağız inşallah.

Evet bir pencere oluşturmak bu kadar kolay.Şimdi baştaki iki fonksiyon içinde yazanlara bakalım:

ayarlar() içerisindeki glClearColor() ile ekranı belirli bir renkle temizliyoruz.Binevi arkaplan.İçindeki dört argüman 0.0,0.0,0.0,0.0 renkleri ifade ediyor.
İlk üç argüman kırmızı-yeşil-mavi renkleri ifade ediyor.Bu sayıların değeri en fazla 1.0 olabilir.0.0,1.0,0.0 , 0.5,0.6,0.9 vb. örnek olarak.Bu şekilde değişik renkler elde edebilirsiniz.Dördüncü argüman ise saydamlığı ifade eder.Yine aynı kurallar geçerli.

glShadeModel() ve içindeki GL_FLAT argümanı ile ekranın türünü ayarlıyoruz.Burada ekran düz.3 boyutlu nesneler ile uğraşırken GL_FLAT yerine GL_SMOOTH yazacağız.Kısaca 2 boyutlu nesneleri çizmek için GL_FLAT kullanılır.Ama elbette 2b nesneler için GL_SMOOTH de kullanabiliriz.

gosterim() içerindeki glClear() ile renk tamponunu oluşturuyoruz.Bunun teknik kısmını pek bilmiyorum ama yine bu bir kalıptır,uygulamalarda kullanılır.
glFlush() ile gosterim içerisine belirttiğimiz cisimleri adından anlaşılacağı gibi çizer.Burada herhangi bir cisim tanımlamadığımız için bir görevi yok.Peki o zaman niye yazıyoruz?Ustalar bunu böyle yapmış bizde böyle yapıyoruz.

Umarım biraz olsun bişeyler anlatabilmişizdir.Aslında çok kolay ama çalışmak gerekiyor.
Bu yazıyı hazırlamadan önce Seçkin Yayınevi'nin Opengl ve Glut ile Oyun Programcılığına giriş adlı kitabını okudum.Tavsiye ederim.
Ayrıca http://www.godoro.com/Divisions/Ehil/Mahzen/Programming/OpenGL/txt/html/tree_tree.html adlı adreste güzel şeyler bulabilirsiniz.
Opengl.org'tan indirebileceğiniz Opengl ve Glut kullanarak Opengl öğrenmek "Redbook" adlı büyük(600 sayfa civarı) pdf dosyasını da tavsiye ederim.
 
Kurulum: 
 
Opengl'nin sisteme kurulması zahmetsiz.
Önce bu dosyaların hepsini indirin.

http://www.hemenpaylas.com/download/437175/glaux.dll.html

http://www.hemenpaylas.com/download/437183/glut32.dll.html

http://www.hemenpaylas.com/download/437191/glaux.h.html

http://www.hemenpaylas.com/download/437194/glut.h.html

-glut32.dll'yi Windows'ta system32 veya Command klasörlerinden birine atıyoruz.
-glut.h dosyasını derleyicinin include klasörünün içinde yer alan GL adlı klasöre atıyoruz.
-glaux.dll dosyasını Windows'ta system32 veya Command klasörlerinden birinin içine atıyoruz.
-glaux.h adlı dosyayı derleyicinin include klasörünün içinde yer alan GL adlı klasöre atıyoruz.

Dev-C++'da proje ayarları bölümünün Parametre sekmesinin içindeki Bağlayıcı(Linker) kısmına bu şekilde alt alta önlerine tire koyarak yazmamız gerekiyor.

-lopengl32
-lglu32
-lglut32
-lglaux
-lwinmm

Visual C++ 6.0'da ise
Project Settings penceresinde ise yanyana "opengl32.lib glaux.lib glut32.lib winmm.lib" yazıyoruz.Aralarda boşluk olması gerekiyor.


Devamı gelecek inşallah.,
 
Caner Berker-Berkay Uzuncu
  Yorum yok.
Yorum ekle. (0 yorum)

 

OyunGelistirici.net - Türk Oyun Yapımcılarının Buluşma Noktası

Bu sitede yazılan tüm yazıların hakları yazarlarına aittir. İzin alınmadan yayınlanamaz.

Bu sitede Firefox kullanmanız önerilir. En az 1024 x 768 masaüstü çözünürlüğü tavsiye edilir.