OpenGL programlamaya giriş: Revizyonlar arasındaki fark

Ubuntu Türkiye Wiki sitesinden
Gezinti kısmına atla Arama kısmına atla
14. satır: 14. satır:
{{kod|Çalıştırma|./program}} yeterlidir. Eğer bir IDE kullanıyorsanız kütüphanelerin bağlanması için '''Proje''' ayarlarına girdikten sonra '''Linker''' bölümünden gerekli yerlere gerekli anahtarlarla ayarları yapmanız gerekir. Örneğin NetBeans için soldaki çalıştığımız projeye sağ tık yaptıktan sonra açılan '''Properties''', oradan '''Linker''' bölümünde bulunan '''Command Line''' altındaki satıra  
{{kod|Çalıştırma|./program}} yeterlidir. Eğer bir IDE kullanıyorsanız kütüphanelerin bağlanması için '''Proje''' ayarlarına girdikten sonra '''Linker''' bölümünden gerekli yerlere gerekli anahtarlarla ayarları yapmanız gerekir. Örneğin NetBeans için soldaki çalıştığımız projeye sağ tık yaptıktan sonra açılan '''Properties''', oradan '''Linker''' bölümünde bulunan '''Command Line''' altındaki satıra  
{{kod|Parametre|-lGL -lGLU -lglut}} ekleyerek ayarları yaparız. Bu ayarlar hemen hemen bütün IDE'lerde bu şekildedir. Bu kadar hazırlıktan sonra ilk programımızı yazalım ve derleyelim.
{{kod|Parametre|-lGL -lGLU -lglut}} ekleyerek ayarları yaparız. Bu ayarlar hemen hemen bütün IDE'lerde bu şekildedir. Bu kadar hazırlıktan sonra ilk programımızı yazalım ve derleyelim.
==İlk Program==
<source lang="cpp">
#include <GL/glut.h>
void sahne(){
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_POINTS);
        glVertex2f(0,0);
glVertex2f(0.2,0);
glVertex2f(0.2,0.5);
glEnd();
glFlush();
}
int main(int argc, char **argv){
glutInit(&argc,argv);
        glutCreateWindow("Ilk programimiz");
glutDisplayFunc(sahne);
glutMainLoop();
return 0;
}</source>
İlk olarak gluttan bahsedecek olursak GLUT , “OpenGL Utility Toolkit” ‘in kısaltmasıdır.OpenGL uygulamalarının işletim sisteminin pencere sistemlerinden bağımsız olmasını sağlar.Bu apiye ait işlevler glut.... önekini alırlar.Ayrıca bu api sayesinde klavye, mouse hareketlerinide yakalayabilir, oyun moduna geçerek tam ekran uygulamalar, menüler oluşturabiliriz.
<br>
Programı satır satır anlatalım.
<br>
İlk satırda programa ilgili başlık dosyalarını dahil ettik, zaten C/C++ bilenler buna yabancılık çekmeyeceklerdir. Main fonksiyonundan devam edersek <br>
'''glutInit(&argc,argv)'''  fonksiyonu bütün OpenGL programlarımızda çağrılması gerekli işlevdir.Bu glutun kullanım için hazırlanması, ilklendirilmesi için gereklidir.Argümanlarını main fonksiyonundan alır.
<br>
'''glutCreateWindow("Ilk programimiz")''' fonksiyonu ise çizim gerçekleştirebileceğimiz bir pencere oluşturulmasını sağlar, argümanı pencerenin başlığıdır.
<br>
'''glutDisplayFunc(sahne)''' fonksiyonu ise kendisine parametre olarak geçilen fonksiyonu çağırır ve çizimi yapar.Dikkat ederseniz argümanı bir fonksiyondur.
<br>
'''glutMainLoop()''' işlevi ise Ana döngü dediğimiz olaya girer.Yani çizim yapıldıktan sonra klavye, mouse hareketlerini bekler.
<br>
'''return 0''' programın başarılı bir şekilde sonlandırıldığı bildirir.Bunlar glut apisine ait ayarlardı, hemen hemen bütün programlarımızda bunları ve bir kaç işlev daha ekleyerek kullanacağız.
<br>
'''sahne()''' fonksiyonun içne bakacak olursak ilk satırda çizim için kullanılacak olan tamponları temizliyoruz.Bunu '''glClear(GL_COLOR_BUFFER_BIT)''' işlevi ile yapıyoruz.
<br>
'''glBegin(GL_POINTS)''' işlevinde ise OpenGL ye çizime başlayacağını söylüyoruz.Biz burada çizimimizin noktalardan oluşacağını söyledik, bunun yerine kullanabileceğimiz diğer enumlar ise
<br>
<source lang="cpp">
                GL_POINTS Verilen koordinatlara nokta ciz
GL_LINES Verilen her iki nokta arasina cizgi ciz
GL_LINE_STRIP Verilen noktalari cizgilerle birlestir
GL_QUADS Verilen 4 noktaya dortgen ciz
GL_TRIANGLES Verilen 3 noktaya ucgen ciz
GL_TRIANGLES_STRIP Kenarları cakisik ucgenler ciz, yelpaze seklinde
</source>
<br>
'''glVertex2f(0,0)''' noktanın koordinatını söylüyoruz.Burayı biraz genişletelim.Buradaki söz diziminden bahsedecek olursak gl... öneki OpenGL nin işlevlerinde bulunan önektir.'''Vertex''' koordinatı belirttiğimizi söyleyen bir fonksiyonun ismiymiş gib düşünebiliriz.'''2''' sayısı ise noktamızın 2 boyutlu bir uzayda(yani x-y düzlemi) belirttiğimizi bildirir.'''f''' ise argümanların float tipinde olduğunu söyler.Örneğin '''glVertex3d(0,0,0)''' gibi bir yazım ise noktamızın 3 boyutlu bir uzayda (x-y-z) argümanları double olan bir noktanın bildirimini yapar.Kartezyen Koordinat sistemini bildiğinizi varsayarak sadece şunları belirtmek istiyorum.Ekranın düşeyi y-eksenidir, yatayı ise x-eksenidir.Ekrandan bize doğru gelen eksen ise z-eksenidir.Bunların üçüde birbirine diktir.Başlnagıç noktası ise ekranın tam ortasıdır.Ekranın en üstü y değerinin 1(bir), en altınında -1 olduğu değerdir.Ekranın sol kenarı x'in -1 sağ kenarın +1 olduğu değerdir.Yani ekran 2 birim uzunluğundadır hem yatay hemde dikey olarak, çizimlerimizi bunlara göre yapmamız lazım.Aksi taktirde çizimimiz ekranda gözükmeyecektir.
<br>
'''glVertex2f(0,0);
glVertex2f(0.2,0);
glVertex2f(0.2,0.5);''' ile noktalarımızın koordinatlarını belirtiyoruz.
<br>
'''glEnd()''' ile nokta çizimimizin bittiğini bildiriyoruz.Çizim bittiğine öre bunları ekrana yansıtmak, ekrana da çizilmesini sağlamak için
<br>
'''glFlush()''' fonksiyonunu kullanıyoruz.
<br>
Programı derleyip çalıştırırsak ekranda çok küçük 3 noktanın olduğunu göreceksiniz.Fonksiyonların (glBegin(),glVertex2f()) argümanlarını değiştirerek değişiklikleri gözlemye çalışınız.İstediğiniz yerlere noktalar koymaya çalışınız ve Vertex mantığını kavrayınız.
<br>
<br>
Devamı Gelecek....  :) :)


== İlk Program ==
== İlk Program ==

20.05, 9 Temmuz 2011 tarihindeki hâli

OpenGL Programlamaya Giriş

  1. Kurulum ve Derleme
  2. İlk Programımız

Kurulum ve Derleme

Ubuntu'da OpenGL dosyalarını derlemek için gerekli kütüphanelerden bazıları şunlardır: freeglut3, freeglut3-dev. Şimdilik bize bu kütüphaneler yeterli. İlerledikçe gerekli kütüphaneleri kurabiliriz. Bu kütüphaneleri konsol kullanarak kurmak için:

Görevi: Kurulum
sudo apt-get install freeglut3 freeglut3-dev

komutunu vermek yeterli böylece kütüphaneler kurulacaktır. Diğer bir yöntem de Synaptic Paket Yöneticisi'nden bu kütüphaneleri tek tek kurmaktır. OpenGL'de genelde C/C++ kullanılır. C/C++ kaynak dosyaları da ".cpp" uzantılıdır. Normalde C++ dosyalarını konsol kullanarak derlemek için:

Görevi: Derleme
g++ kaynak.cpp -o program

komutu ile derlenir. Tabii ki bunu derleyebilmek için sisteminizde gcc/g++ derleyicisinin kurulu olması gerekir. Eğer kurulu değilse onu da

Görevi: Kurulum
sudo apt-get install g++

ile kurabilirsiniz. Derlenmiş dosyayı

Görevi: Çalıştırma
./program

şeklinde çalıştırabiliriz. Buraya kadar C++ derleme ile ilgili konulara bir özet geçmiş olduk. Şimdi OpenGL kodlarını derlemek için derleyiciye bazı kütüphanelerin bağlanmasını gerektiğini belirten anahtarlardan bahsedelim. Bu anahtar -l (Küçük L harfi) ardından da bağlanacak dosya gelir. OpenGL dosyalarını derlemek için bize gerekli komut:

Görevi: Derleme
g++ kaynak.cpp -o program -lGL -lGLU -lglut

şeklindedir. Çalıştırmak için de yukarıda söylediğimiz gibi:

Görevi: Çalıştırma
./program

yeterlidir. Eğer bir IDE kullanıyorsanız kütüphanelerin bağlanması için Proje ayarlarına girdikten sonra Linker bölümünden gerekli yerlere gerekli anahtarlarla ayarları yapmanız gerekir. Örneğin NetBeans için soldaki çalıştığımız projeye sağ tık yaptıktan sonra açılan Properties, oradan Linker bölümünde bulunan Command Line altındaki satıra

Görevi: Parametre
-lGL -lGLU -lglut

ekleyerek ayarları yaparız. Bu ayarlar hemen hemen bütün IDE'lerde bu şekildedir. Bu kadar hazırlıktan sonra ilk programımızı yazalım ve derleyelim.

İlk Program

#include <GL/glut.h>
void sahne(){
	glClear(GL_COLOR_BUFFER_BIT);		
	glBegin(GL_POINTS);	
        glVertex2f(0,0);
	glVertex2f(0.2,0);
	glVertex2f(0.2,0.5);
	glEnd();
	glFlush();
}
int main(int argc, char **argv){
	glutInit(&argc,argv);
        glutCreateWindow("Ilk programimiz");		
	glutDisplayFunc(sahne);						
	glutMainLoop();
	return 0;
}

İlk olarak gluttan bahsedecek olursak GLUT , “OpenGL Utility Toolkit” ‘in kısaltmasıdır.OpenGL uygulamalarının işletim sisteminin pencere sistemlerinden bağımsız olmasını sağlar.Bu apiye ait işlevler glut.... önekini alırlar.Ayrıca bu api sayesinde klavye, mouse hareketlerinide yakalayabilir, oyun moduna geçerek tam ekran uygulamalar, menüler oluşturabiliriz.
Programı satır satır anlatalım.
İlk satırda programa ilgili başlık dosyalarını dahil ettik, zaten C/C++ bilenler buna yabancılık çekmeyeceklerdir. Main fonksiyonundan devam edersek
glutInit(&argc,argv) fonksiyonu bütün OpenGL programlarımızda çağrılması gerekli işlevdir.Bu glutun kullanım için hazırlanması, ilklendirilmesi için gereklidir.Argümanlarını main fonksiyonundan alır.
glutCreateWindow("Ilk programimiz") fonksiyonu ise çizim gerçekleştirebileceğimiz bir pencere oluşturulmasını sağlar, argümanı pencerenin başlığıdır.
glutDisplayFunc(sahne) fonksiyonu ise kendisine parametre olarak geçilen fonksiyonu çağırır ve çizimi yapar.Dikkat ederseniz argümanı bir fonksiyondur.
glutMainLoop() işlevi ise Ana döngü dediğimiz olaya girer.Yani çizim yapıldıktan sonra klavye, mouse hareketlerini bekler.
return 0 programın başarılı bir şekilde sonlandırıldığı bildirir.Bunlar glut apisine ait ayarlardı, hemen hemen bütün programlarımızda bunları ve bir kaç işlev daha ekleyerek kullanacağız.
sahne() fonksiyonun içne bakacak olursak ilk satırda çizim için kullanılacak olan tamponları temizliyoruz.Bunu glClear(GL_COLOR_BUFFER_BIT) işlevi ile yapıyoruz.
glBegin(GL_POINTS) işlevinde ise OpenGL ye çizime başlayacağını söylüyoruz.Biz burada çizimimizin noktalardan oluşacağını söyledik, bunun yerine kullanabileceğimiz diğer enumlar ise

                GL_POINTS					Verilen koordinatlara nokta ciz
		GL_LINES					Verilen her iki nokta arasina cizgi ciz
		GL_LINE_STRIP				Verilen noktalari cizgilerle birlestir
		GL_QUADS					Verilen 4 noktaya dortgen ciz
		GL_TRIANGLES				Verilen 3 noktaya ucgen ciz
		GL_TRIANGLES_STRIP			Kenarları cakisik ucgenler ciz, yelpaze seklinde


glVertex2f(0,0) noktanın koordinatını söylüyoruz.Burayı biraz genişletelim.Buradaki söz diziminden bahsedecek olursak gl... öneki OpenGL nin işlevlerinde bulunan önektir.Vertex koordinatı belirttiğimizi söyleyen bir fonksiyonun ismiymiş gib düşünebiliriz.2 sayısı ise noktamızın 2 boyutlu bir uzayda(yani x-y düzlemi) belirttiğimizi bildirir.f ise argümanların float tipinde olduğunu söyler.Örneğin glVertex3d(0,0,0) gibi bir yazım ise noktamızın 3 boyutlu bir uzayda (x-y-z) argümanları double olan bir noktanın bildirimini yapar.Kartezyen Koordinat sistemini bildiğinizi varsayarak sadece şunları belirtmek istiyorum.Ekranın düşeyi y-eksenidir, yatayı ise x-eksenidir.Ekrandan bize doğru gelen eksen ise z-eksenidir.Bunların üçüde birbirine diktir.Başlnagıç noktası ise ekranın tam ortasıdır.Ekranın en üstü y değerinin 1(bir), en altınında -1 olduğu değerdir.Ekranın sol kenarı x'in -1 sağ kenarın +1 olduğu değerdir.Yani ekran 2 birim uzunluğundadır hem yatay hemde dikey olarak, çizimlerimizi bunlara göre yapmamız lazım.Aksi taktirde çizimimiz ekranda gözükmeyecektir.
glVertex2f(0,0); glVertex2f(0.2,0); glVertex2f(0.2,0.5); ile noktalarımızın koordinatlarını belirtiyoruz.
glEnd() ile nokta çizimimizin bittiğini bildiriyoruz.Çizim bittiğine öre bunları ekrana yansıtmak, ekrana da çizilmesini sağlamak için
glFlush() fonksiyonunu kullanıyoruz.
Programı derleyip çalıştırırsak ekranda çok küçük 3 noktanın olduğunu göreceksiniz.Fonksiyonların (glBegin(),glVertex2f()) argümanlarını değiştirerek değişiklikleri gözlemye çalışınız.İstediğiniz yerlere noktalar koymaya çalışınız ve Vertex mantığını kavrayınız.

Devamı Gelecek....  :) :)

İlk Program