Open GL
Yazan: Şadi Evren ŞEKER
Open GL, bilgisayar grafikleri için kullanılan bir 3 boyutlu geliştirme platformudur. Platform çeşitli dillerde kod yazılmasına izin verir (örneğin JAVA, C, C++ gibi) ve platformun dillerden bağımsız olarak kendisine özgü bir fonksiyon kütüphanesi bulunur.
Açık kaynak kodlu olan platformun farklı ortamlarda rahatça kullanılabiliryor olması geniş bir kullanım alanına sahip olmasını sağlamıştır. Dillerden bağımsız olarak pekçok işletim sistemi ve geliştirme ortamında da kod yazılabilmektedir. Platformun çalışabilmesi için bilgisayarda bulunan ekran kartının desteklenmesi gerekmesi bazı kurulumlarda problem yaratmaktadır.
Windows için geliştirme ortamlarından birisi olan DEV C++ bilgisayara başarıyla kurulduktan sonra basit Open GL uygulamaları hızlıca geliştirilebilir. Aşağıda DEV-C++ ile yazılmış basit bir uygulama örneği açıklanmıştır:
#include <windows.h> #include "glutil.h"
windows üzerinde glutil kütüphanesi ile kod yazılacaktır. Open GL fonksiyonları bu kütüphanede bulunduğu için include edilir.
OpenGL *opengl;
OepnGL sınıfından (class) bir gösterici (pointer) tanımlanmıştır. Daha ileride bu gösterici kullanılacaktır.
bool init()
{
glClearColor(0.93f, 0.93f, 0.93f, 0.0f);
glColor3f(0.0f, 0.0f, 0.0f);
return true;
}
Kodun init fonksiyonudur. ve kod ilk çalıştırıldığında ekranı ve renk sistemini temizlemek için kullanılan fonksiyonları çağırır.
void display()
{
glClear(GL_COLOR_BUFFER_BIT);
glBegin(GL_LINE_STRIP);
glVertex3f(-1.0f, 1.0f, 0.0f);
glVertex3f(-0.5f, 0.5f, 0.0f);
glVertex3f(-0.7f, 0.5f, 0.0f);
glEnd();
glBegin(GL_TRIANGLES);
glVertex3f(-0.5f, -0.5f, 0.0f);
glVertex3f( 0.5f, -0.5f, 0.0f);
glVertex3f( 0.0f, 0.5f, 0.0f);
glEnd();
glBegin(GL_QUADS);
glVertex3f(-1.0f, -1.0f, 0.0f);
glVertex3f(-0.5f, -1.0f, 0.0f);
glVertex3f(-0.5f, -0.5f, 0.0f);
glVertex3f(-1.0f, -0.5f, 0.0f);
glEnd();
glBegin(GL_POLYGON);
glVertex3f( 0.8f, 0.6f, 0.0f);
glVertex3f( 0.9f, 0.8f, 0.0f);
glVertex3f( 0.5f, 0.9f, 0.0f);
glVertex3f( 0.6f, 0.5f, 0.0f);
glEnd();
glFlush();
}
Yukarıdaki kod display fonksiyonudur. Bu kodun içerisinde basit bazı varlıklar çizilmiştir. Sırasıyla her glBegin ve glEnd arasında kalan grupta bir doğru, üçgen, dörtgen ve çokgen (poligonI) çizilmiş ve bu çizme işlemi çin geçerli olacak köşe noktalarının koordinatları verilmiştir.
void idle()
{
}
Open GL için animasyonlarda anlamlı olan fonksiyon, bu uygulama için boş bırakılmıştır.
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
opengl = OpenGL::create();
opengl->setInitFunc(init);
opengl->setDisplayFunc(display);
opengl->setIdleFunc(idle);
if (!opengl->initGL("05 - Primitives", 500, 500, false, 32))
return 1;
opengl->runMessageLoop();
return 0;
}
windows.h dosyası include edilerek oluşturulan uygulamamızda klasik c, c++ programlamasından farklı olarak main() fonksiyonu yerine windows’un main fonksiyonu olan WinMain fonksiyonu kodlanmıştır. Kodun başında tanımlanmış olan ve OpenGL sınıfından bir gösterici olan opengl değişkeni burada değer kazanmış ve OpenGL kütüphanesinden create() fonksiyonunu çağırarak çalışma ortamını hazırlamıştır.
Daha sonra kullanılacak olan özel fonksiyonlar belirlenmiştir. Buna göre OpenGL ortamının init, display ve idle fonksiyonlarının kodumuzdaki hangi fonksiyonlara karşılık geldiği belirtilmiştir.
Bu 3 fonksiyon dışında da özel fonksiyonlar bulunmakta ve bunlar da benzer tanımlamalar ile koddaki başka fonksiyonlara bağlanabilmektedir. (örneğin klavye işlemlerinin hangi fonksiyon tarafından algılanacağının belirlenmesi gibi)
if kontrolü içerisinde bir opengl penceresi açılmış pencerenin başlığına “05 - Primitives” yazısı yazılmış, pencerinin boyutu (eni ve boyu) 500′e 500 olarak berlirlenmiştir.
son olarak opengl göstericisinin runMessageLoop fonksiyonu çağırılarak opengl’in çalıştığı ana döngü tetiklenmiş ve return 0 ile de kod bitmiştir.
Çalışan kod aşağıdaki şekildedir:
« Yumuşatma (Antialiasing) | Çokgen (Poligon, Polygon) »
Yorumlar
Giriş yaparak yorum yazabilirsiniz.
Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'Open GL' isimli yazı 05 Sep 2008 tarihinde, saat: 14:04 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam 388 defa okunmuştur.
Benzer yazıları Bilgisayar Grafiği (Computer Graphics), C/C++ kategorilerinden okuyabilirsiniz. Yazar ile irtibat kurmak için email gönderebilirsiniz. Yazıya yorum yapabilir ya da yapılan yorumları RSS 2.0 ile takibe alabilirsiniz.
Eklenen Son Yazılar
- OpenGL İsim Dizisi
- OpenGL Nesne Seçimi (Object Picking)
- Java Bean
- Türkçe Netbeans
- C ile Zaman İşlemleri
- JSP Oturumları (JSP Sessions)
- JSP Direktifleri (JSP Directives)
- JSP ve HTML
- JSP Etiketleri (JSP Tags)
- Netbeans ile JSP
Yapılan Son Yorumlar
- Şadi Evren ŞEKER: Yukarıdaki şekilde en altta bulunan...
- hercumartesi: 777/10 mod23 işleminde takıldığım...
- hercumartesi: 2P = R olarak gösterip s için (3xP^2 + a)...
- Şadi Evren ŞEKER: Toplama işlemi sonucunda mod işlemi...
- bazenvebazen: n q b b w derken n q p b w demek istedik?...
Yakın Yazılar
Protokol Kümesi (Protocol Stack , Protokol Yığıtı)
Paket değişimli (Packet Switching) Ağlar
TCP (Transmission Control Protocol (Nakil Hakimiyet Anlaşması , İletim Kontrol Protokolü))
OpenGL ile Arkayüz (Opengl Backface)
OSI (Open System Interconnection (Açık sistem bağlatı))
OpenGL ile kullanıcılı iletişimi (user interaction)
Bağlantılar
