You are on page 1of 11

,

OpenGL Uygulamalar
1. Giri
Gnmzde yazlm ve donanmn gelimesi ile birlikte bilgisayar grafikleri alannda olduka nemli gelimeler kaydedilmektedir. Bu gelimelere paralel olarak yazlm gelitirme ktphaneleri de ortaya kmaktadr. OpenGL (Open Graphic Library) de gelimi grafik uygulamalar iin gelitirilen bir ktphanedir. OpenGL grafik ktphanesi, grafik donanmna bir yazlm arayzdr. 2D ya da 3D nesnelerden oluan hareket eden grntler reten, interaktif, ok eitli bilgisayar platformlarnda alabilecek programlar yaratmamza olanak salar. OpenGL, donanm-bamsz bir arayzdr. Grntde bulunan nesneleri tanmlamak ve bu nesneler zerinde gerek duyulan ilemleri gerekletirmek iin yaklak 700 farkl komut ierir. (Bu komutlardan yaklak 650 tanesi saf OpenGL komutu ve yaklak 50 tanesi ise OpenGL Utility Library de bulunmaktadr [1]. OpenGL komut yorumlama modeli, istemci/sunucu (client/server) modelidir. Uygulama kodu (istemci), komut arlarn yapar. Bu komutlar, OpenGL (sunucu) tarafndan yorumlanr ve ilenir. OpenGL, grafik programn koan ve yarattmz grafii grntleyen bilgisayarlar farkl olduunda bile etkili alacak ekilde tasarlanmtr. Bu durum, istemci ve sunucunun farkl tip bilgisayarlar olabilecei bir bilgisayar a ortamnda geerlidir. OpenGL in donanm-bamsz olmasnn nedeni, pencere ilemlerini (windowing task-ekranda bir pencere oluturmak gibi) yapan ya da kullancdan girdi alan herhangi bir komutunun bulunmamasdr. Belirtilen bu ileri gerekletirmek iin iletim sisteminin mevcut zellikleri kullanlr. Ancak iletim sisteminde pencere ilemlerini gerekletirmek karmak ilemler ierdiinden tm bu ilevleri barndran ve iletim sistemine zel olarak yazlm GLUT (Graphic Library Utility) ktphaneleri bulunmaktadr. OpenGL, 3D nesneleri tanmlamak iin yksek-seviye komutlar iermez. Bunun yerine; nokta, doru ve poligon gibi alt-seviye geometrik primitifleri kullanarak nesneleri tanmlamamza olanak salar. Primitifler, bir ya da daha fazla vertex ile tanmlanr. Bir nokta, bir dorunun balang ve biti noktalar, bir poligonun iki kenarnn kesitii ke noktas, vertex ler yardmyla belirlenir.

2. OpenGL
2.1.Neden OpenGL ? OpenGL kullanarak grafikler oluturmann avantajlar aada sralanmtr. Tm OpenGL uygulamalar, iletim sistemi ne olursa olsun, OpenGL API uyumlu donanmlar zerinde mkemmel grsel sonular retebilir. Grafik donanmlarnn yeni gelimi zellikleri, OpenGL tarafndan, gelitirme mekanizmas (extension mechanism) sayesinde kullanlabilir. Yani OpenGL, donanma-zel, gelimi zellikleri kullanmak iin API fonksiyonlar ierebilir. OpenGL temelli grafik uygulamalar, ok eitli sistemler zerinde koulabilir. (tketici elektronii consumer electronics, PC, i istasyonu workstation, sper bilgisayarlar gibi) OpenGL grafik ktphanesi kullanlarak, ok daha az bir kod satryla daha yksek performansa

sahip uygulamalar gelitirmek mmkndr. OpenGL grafik ktphanesine dair teknik bilgi ieren birok kaynak mevcuttur.(internet, kitaplar, vs.) Birok programlama dili (C, C++, Fortran, Ada, Java gibi) OpenGL tabanl uygulama gelitirmemize olanak salar. 2.2.Open GL Utility (GLUT) OpenGL platformdan bamsz olduu iin baz ilemler bu kitaplk ile yaplamaz. rnein kullancdan veri almak, bir pencere izdirmek gibi iler hep kullanlan pencere yneticisi ve iletim sistemine baldr. Bu yzden bir an iin OpenGL'in platform baml olduu dnlebilir. nk alma penceresini her pencere yneticisinde (her ortamda) farkl izdirecek bir canlandrma program yazmak demek her bilgisayarda alacak ayr pencere ama kodu yazmak demektir. Bu ise OpenGL'in doasna aykrdr. Bu gibi sorunlar amak iin OpenGL Ara Kiti (GLUT - OpenGL Utility Toolkit) kullanlmaktadr. GLUT, birok iletim sistemine aktarlm bir kitaplktr. Amac OpenGL programlarnn pencerelerini oluturmak, klavye ve fareden veri almak gibi ihtiyalar karlamaktr. GLUT olmadan da OpenGL programlama yaplabilir, rnein Linux'ta kullanlan X-Window sistemin kendi ilevleri kullanlarak pencere izdirilebilir fakat bu kod sadece X-Window'da alr. Kod Windows'a gtrlp derlendiinde almaz, nk Windows'da X-Window ilevleri yoktur. Benzer ekilde Windows tabanl iletim sistemlerinin de kendilerine has pencere oluturma ilevleri vardr. Bu yzden bu deneyde GLUT kitapl kullanlarak klavye ve fare iin iletim sisteminden bamsz giris/k ilemleri yaplmas salanmtr. 2.3.OpenGL Sz dizimi Opengl komutlar, gl neki ile balarlar. (rnek; glClearColor()). Benzer ekilde OpenGL tarafndan tanml sabitler de GL_ neki ile balarlar ve kelimeler birbirinden _ ile ayrlacak ekilde byk harfle yazlrlar. (rnek; GL_COLOR_BUFFER_BIT). glColor3f komutundaki 3 says da 3 parametre alaca anlamna gelmektedir. f ise verilen parametrelerin float olaca anlamna gelmektedir. glVertex2i(1,3); ya da glVertex2f(1.0,3.0); gibi 2.4.lk OpenGL Program
#include <GL/glut.h> #include <stdlib.h> void ayarlar(void) { glClearColor(0.0,0.0,0.0,0.0); glShadeModel(GL_FLAT); glOrtho(-2.0, 2.0, -2.0, 2.0, -1.0, 1.0); }

void gosterim(void) { glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 0.0, 0.0); glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5); glEnd(); glFlush(); } int main(int argc,char ** argv) { glutInit(&argc,argv); glutInitDisplayMode(GLUT_SINGLE | GLUT_RGB ); glutInitWindowPosition(0,0); glutInitWindowSize(200,200); glutCreateWindow("OpenGL Uygulamalar-I"); ayarlar(); glutDisplayFunc(gosterim); glutMainLoop(); return 0; }

Programda ilk olarak bir pencere yaratlmakta daha sonra da gsterim fonksiyonu ayarlanmaktadr. Gsterim fonksiyonu ierisinde de her defasnda izilecek olan grafik izilmektedir. Bu hali ile verilen kod basit bir openGL programnn iskeletini oluturmaktadr. Program altrldnda elde edilen ekran grnts ekil 1de verilmitir.

ekil 1. OpenGL ile izilmi basit bir ekil 2.5.OpenGL ile Birden Fazla ekil izimi Birden fazla ekil izmek iin yukarda verilen iskelet program zerinde sadece gosterim isimli fonksiyon aadaki ekilde deitirilir.

void gosterim(void) { glLoadIdentity(); glClear(GL_COLOR_BUFFER_BIT); glColor3f(1.0, 0.0, 0.0); glOrtho(-2.0, 7.0, -2.0, 2.0, -1.0, 1.0); glBegin(GL_TRIANGLES); glVertex3f( 0.0f, 1.0f, 0.0f); glVertex3f(-1.0f,-1.0f, 0.0f); glVertex3f( 1.0f,-1.0f, 0.0f); glEnd(); glTranslatef(3.0f,0.0f,0.0f); glBegin(GL_QUADS); glVertex3f(-1.0f, 1.0f, 0.0f); glVertex3f( 1.0f, 1.0f, 0.0f); glVertex3f( 1.0f,-1.0f, 0.0f); glVertex3f(-1.0f,-1.0f, 0.0f); glEnd(); glTranslatef(3.0f,0.0f,0.0f); glBegin(GL_POLYGON); glVertex2f(-0.5, -0.5); glVertex2f(-0.5, 0.5); glVertex2f(0.5, 0.5); glVertex2f(0.5, -0.5); glEnd(); glFlush(); }

Verilen programn ekran grnts ekil 2de verilmitir.

ekil 2. OpenGL ile birden ok ekil izmek Tartma Sorusu-1 : Gsterim fonksiyonunda kullanlan glLoadIdentity(); fonksiyonunun ilevi nedir? Neden kullanlmtr? Bu fonksiyon kullanlmasayd ekran grnts nasl olurdu? Tartnz

2.6.OpenGL ile 3B ekil izimi Verilen taslak program zerinde main, gsterim fonksiyonu aadaki gibi deitirilerek 3B ekiller izilebilmektedir. Yazlan yeni openGL kodu aada verilmitir.
#include "GL/glut.h" #include <stdlib.h> GLfloat GLfloat rtri; rquad;

void ayarlar(void) { glClearColor(0.0,0.0,0.0,0.0); glMatrixMode(GL_PROJECTION); glOrtho(-7.0, 7.0, -2.0, 2.0, -5.0, 5.0); rtri = 0.0f; } void idle() { rtri +=0.2f; rquad+=0.15f; glutPostRedisplay(); } void gosterim(void) { glEnable(GL_DEPTH_TEST); glColor3f(1.0, 0.0, 0.0); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); glPushMatrix(); glTranslatef(-1.5f,0.0f,0.0f); glRotatef(rtri,0.0f,1.0f,0.0f); glBegin(GL_TRIANGLES); glColor3f(1.0f,0.0f,0.0f); glVertex3f( 0.0f, 1.0f, 0.0f); glColor3f(0.0f,1.0f,0.0f); glVertex3f(-1.0f,-1.0f, 1.0f); glColor3f(0.0f,0.0f,1.0f); glVertex3f( 1.0f,-1.0f, 1.0f); glColor3f(1.0f,0.0f,0.0f); glVertex3f( 0.0f, 1.0f, 0.0f); glColor3f(0.0f,0.0f,1.0f); glVertex3f( 1.0f,-1.0f, 1.0f); glColor3f(0.0f,1.0f,0.0f); glVertex3f( 1.0f,-1.0f, -1.0f); glColor3f(1.0f,0.0f,0.0f); glVertex3f( 0.0f, 1.0f, 0.0f); glColor3f(0.0f,1.0f,0.0f); glVertex3f( 1.0f,-1.0f, -1.0f); glColor3f(0.0f,0.0f,1.0f);

glVertex3f(-1.0f,-1.0f, -1.0f); glColor3f(1.0f,0.0f,0.0f); glVertex3f( 0.0f, 1.0f, 0.0f); glColor3f(0.0f,0.0f,1.0f); glVertex3f(-1.0f,-1.0f,-1.0f); glColor3f(0.0f,1.0f,0.0f); glVertex3f(-1.0f,-1.0f, 1.0f); glEnd(); glPopMatrix(); glTranslatef(4.0f,0.0f,0.0f); glPushMatrix(); glRotatef(rtri,1.0f,1.0f,1.0f); glBegin(GL_QUADS); glColor3f(0.0f,1.0f,0.0f); glVertex3f( 1.0f, 1.0f,-1.0f); glVertex3f(-1.0f, 1.0f,-1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glColor3f(1.0f,0.5f,0.0f); glVertex3f( 1.0f,-1.0f, 1.0f); glVertex3f(-1.0f,-1.0f, 1.0f); glVertex3f(-1.0f,-1.0f,-1.0f); glVertex3f( 1.0f,-1.0f,-1.0f); glColor3f(1.0f,0.0f,0.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glVertex3f(-1.0f,-1.0f, 1.0f); glVertex3f( 1.0f,-1.0f, 1.0f); glColor3f(1.0f,1.0f,0.0f); glVertex3f( 1.0f,-1.0f,-1.0f); glVertex3f(-1.0f,-1.0f,-1.0f); glVertex3f(-1.0f, 1.0f,-1.0f); glVertex3f( 1.0f, 1.0f,-1.0f); glColor3f(0.0f,0.0f,1.0f); glVertex3f(-1.0f, 1.0f, 1.0f); glVertex3f(-1.0f, 1.0f,-1.0f); glVertex3f(-1.0f,-1.0f,-1.0f); glVertex3f(-1.0f,-1.0f, 1.0f); glColor3f(1.0f,0.0f,1.0f); glVertex3f( 1.0f, 1.0f,-1.0f); glVertex3f( 1.0f, 1.0f, 1.0f); glVertex3f( 1.0f,-1.0f, 1.0f); glVertex3f( 1.0f,-1.0f,-1.0f); glEnd(); glPopMatrix(); glutSwapBuffers(); } int main(int argc,char ** argv)

{ glutInit(&argc,argv); glutInitDisplayMode(GLUT_DEPTH | GLUT_DOUBLE | GLUT_RGBA); glutInitWindowPosition(0,0); glutInitWindowSize(900,400); glutCreateWindow("pencere"); ayarlar(); glutDisplayFunc(gosterim); glutIdleFunc(idle); glutMainLoop(); return 0; }

Tartma Sorusu-2 : rtri ve rquad deikenleri ne iin kullanlmtr. Bu deikenlerin kullanmna alternatif ne gibi yntemler nerilebilir? Tartnz. Tartma Sorusu-3 : glRotatef() ve glTransletef fonksiyonlarnn kullanm amalarn syleyiniz. Tartma Sorusu-4 : glRotatef() ve glTransletef fonksiyonlarnn kullanm srasn yer deitirdiimizde ne gibi sonular ortaya kar. Tartnz Tartma Sorusu-5 : Daire, silindir, daire halkas gibi geometrik ekiller izmek iin kullanlabilecek yntemleri tartnz

3. Deneye Hazrlk
Bu blm, deneye gelmeden nce her renci tarafndan yaplmas gereken maddeleri iermektedir. 1. Deneye gelmeden nce Dev C++ program bilgisayara kurulmal ve temel dzeyde programn kullanl renilmelidir. Program u adresten (http://www.bloodshed.net/download.html) indirilebilir. 2. Ek-1de verilen admlar takip edilerek Dev C++ programna OpenGL ve GLUT ktphaneleri kurulmaldr. 3. Deney fy dikkatlice okunmal ve deneye hazrlk sorular cevaplanmaldr. Deney uygulama ynergesinde gerekli aklamalar bulunmaktadr. Deney uygulama ynergesi web sayfasnda mevcuttur. 4. http://ceng.ktu.edu.tr/labs/glut2_2011.zip adresinde verilen rnek program yazlarak koulmal ve programn alma mant anlalmaldr.

4. Deneyin Yapl
OpenGL hakknda temel bilgiler soru-cevap eklinde sorgulanr. GLUT ktphanesi nedir ve ne iin kullanlr sorularna cevap verilir. GLUT ktphanesi kullanlarak tasarlanan iskelet openGL program yazlr. Basit bir kare ekli izen program incelenir. OpenGL kullanarak birden fazla 2 boyutlu geometrik ekil izimi gerekletiren C++ program incelenir ve gerekli sorular cevaplanr. 6. 3 boyutlu ekil izimi gerekletirilen C++ program incelenir ve gerekli tartma sorular cevaplanr. 1. 2. 3. 4. 5.

7. Daire izimi gerekletiren openGL program renciler tarafndan tasarlanr. Kullanlan teknikler tartlr. 8. Daire halkas izimi gerekletiren openGL program renciler tarafndan tasarlanr. Kullanlan teknikler tartlr. 9. Silindir izimi gerekletiren openGL program renciler tarafndan tasarlanr. Kullanlan teknikler tartlr. 10. Silindir halkas izimi gerekletiren openGL program renciler tarafndan tasarlanr. Kullanlan teknikler tartlr.

5. Deney Sorular
1. 2. 3. 4. 5. 6. 7. 8. OpenGL nedir? Ne iin kullanlr? OpenGL gibi bir grafik ktphanesi kullanmann avantajlar nelerdir? GLUT nedir? Ne iin kullanlr? C++da yazlm iskelet OpenGL programn aklaynz 2 boyutlu kare ekli izen openGL komutlarn aklaynz. 3 boyutlu kp izen openGL komutlarn aklaynz. OpenGL kullanarak nasl daire izileceini aklaynz. OpenGL kullanarak nasl elips izileceini aklaynz.

6. Kaynaka
1. 2. 3. 4. Addison Wesley, OpenGL Programming Guide, 6th Edition, 2008. http://www.opengl.org http://www.lighthouse3d.com/opengl/glut/ http://nehe.gamedev.net/

7. Ek 1
7.1.Adm 1
Dev C++ programn kurun

7.2.Adm 2
Tools / Check for Updates/Packages

7.3.Adm 3

7.4.Adm 4

Ek-2

You might also like