C#nedir?com
 
YAZAR HAKKINDA
Çiğdem Çavdaroğlu
Çiğdem Çavdaroğlu
http://www.csharpnedir.com/
İletişme geçmek için tıklayın.
28 Makalesi yayınlanmakta.
Yazar hakkında detaylı bilgi için tıklayın.
Yayınlanan diğer makaleleri için tıklayın.
İlgili etiketler: belirtir. fonksiyon fonksiyonu fonksiyonun islemleri islemlerini isletim kendisine kullanarak opengl parametre pencere pencerenin penceresi sistemine C / Sys Prog. Çiğdem Çavdaroğlu
 
YAZI HAKKINDA
Türü : Makale
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
Seviyesi : İleri
Kategori : C / Sys Prog.
Yayınlanma Tarihi : 13.7.2005
Okunma Sayısı : 27319
Yorum Sayısı : 4     yorum yaz
Site İçi AramaSİTE İÇİ ARAMA
Üye Girişini AçÜye GİRİŞİ
Üye girişi için tıklayın.
Kullanıcı Adı
Şifre
 
Beni her zaman hatırla
Bir hafta boyunca kullanıcı bilgilerinizi kullanıcı çıkışı yapana kadar hatırlar. (Paylaşılan bilgisayarlarda önerilmez.)
 
Şifremi / Kullanıcı Adımı unuttum.
 
.net TV RSS Serbest KÖŞE (?)
Serbest Köşede C#nedir?com üyelerinin hazırladıkları yazılar yayınlanır. Bu yazılar editör incelemesine girmeden yayınlanır.
emre TAŞ
XML - Deniz Kılınç
emre TAŞ
yazının devamı >
emre TAŞ
Decompiling and Reverse Engineering .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Masaüstü mü ? İnternet Mi? .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
.Net Kavramları - .Net Radyo
emre TAŞ
yazının devamı >
emre TAŞ
Yeni Başlayanlar için - .Net Radyo
emre TAŞ
yazının devamı >
Makale Gönder Bende Yazmak İstiyorum
.net TV RSSBlogroll
Turhal Temizer 'in Blogu
Conda install environment.yml Package 31.3.2020
Turhal Temizer 'in Blogu
Mac OS/X Removing CUDA 31.3.2020
Burak Selim Şenyurt
Sekiz Saatlik Sonsuz Döngü 31.3.2020
Burak Selim Şenyurt
Switch Case Kullanmadan Kod Yazılabilir mi? 31.3.2020
  Diğer Herşey
Sponsorlar
BT Akademi
Medya Portakal
Video Hosting Sponsoru
Csharpnedir.com bir Ineta üyesidir
Uzman Abi
Her Yönüyle C# - Sefer Algan
C ve OpenGL : GLUT Kütüphanesinin Kullanımı
 
Kapat
Sayfayı Yazdır Sık Kullanılanlara Ekle Arkadaşıma Gönder MySpace Del.Ico.Us Digg Facebook Google Mixx Reddit StumbleUpon
C dilini ve OpenGL teknolojisini kullanarak bir çizim penceresinin nasıl oluşturulacağını önceki yazımızda ele almıştık. ’Bir OpenGL Penceresi Oluşturmak’ isimli yazımızda, pencereyi oluştururken ve mesajları işlerken Windows API programlama yöntemini tercih etmiştik. Bunun yanı sıra, pencere oluşturmak ve masajları işlemek gibi işletim sistemine bağlı işlemleri gerçekleştiren birtakım araçlar olduğundan söz etmiştik. Bu araçları kullanma yöntemini seçersek yazmamız gereken kod da azalacaktır. Ayrıca bu gibi işlemler işletim sistemine bağlı olduğu için, Windows API programlama ile yaptığımız uygulama, bir anlamda işletim sistemine bağımlıdır. OpenGL kütüphanesi bu gibi bağımlılıkları aşıp, taşınabilir kodlar yazmayı amaçlayan bir kütüphanedir. Bu amacı gerçekleştirmek için de, işletim sistemine bağlı işlemleri gerçekleştiren bazı araçlar geliştirilmiştir. OpenGL araç kiti denilen, ’GLUT’ olarak kısaltılan araç da bunlardan birisidir. GLUT, pencere oluşturma, mesajları dinleme, klavye ve fare gibi dış araçlardan veri alma gibi gereksinimleri karşılayan bir araçtır. Bu yazımızda, GLUT aracının nasıl kullanılacağını ele alacağız. Daha önce bahsetmiş olduğumuz, Jeff Burns tarafından geliştirilen OpenGL sihirbazının nasıl kullanılacağı konusuna da değineceğiz.

Öncelikle GLUT aracının, bize sunmuş olduğu fonksiyonlara bir göz atalım. Bu fonksiyonları, platform bağımlı işlemleri gerçekleştirmek için kullanacağız.

void glutInit(int *argc,char **argv); Bu fonksiyon, GLUT kütüphanesini kullanıma başlatan fonksiyondur. GLUT kütüphanesi kullanılmaya başlanmadan önce mutlaka bu fonksiyon çağrılmalıdır. Fonksiyon, parametresini main fonksiyonunun parametrelerinden alır.
int glutCreateWindow(char *pencere_ismi); Üzerinde çalışılan platformun pencere sisteminde, yeni bir pencere oluşturur. Parametresi, oluşturulan pencerenin ismidir. Geri dönüş değeri, oluşturulan pencerenin numarasıdır.
void glutDisplayFunc(void (*Func)(void)); Oluşturulan pencere üzerinde çizim işlemlerini yapan fonksiyonu parametre olarak alır ve pencere yeniden çizildiğinde veya oluşturulduğunda bu fonksiyonu çalıştırır.
void glutMainLoop(); Programa gelen olayların (events) dinlenmesini sağlar. Eğer gelen olay tanımlı bir olay ise ona uygun bir fonksiyon çalıştırılır.
void glutInitWindowSize(int genislik,int yukseklik); Oluşturulan pencerenin boyutlarına, parametre olarak geçilen değerleri atar. Ön tanımlı değer (300,300) değeridir.
void glutInitWindowPosition(int x,int y); Pencerenin, ana ekranda konumlanacağı yeri ayarlar. Ön tanımlı değer (-1,-1) değeridir.
* Olay Tanımlama Fonksiyonları

void glutIdleFunc(void(*Func)(void)); Hiçbir olay olmadığı takdirde, kendisine parametre olarak geçilen fonksiyonun çalıştırılmasını sağlar.
void glutReshapeFunc(void (*Func)(int genislik,int yukseklik)); Pencere yeniden boyutlandırıldığında, kendisine parametre olarak geçilen fonksiyonun çalıştırılmasını sağlar.
* Klavye İşlemlerini Yapan Fonksiyonlar :

void glutKeyboardFunc(void(*Func)(char tus,int x,int y)); Klavyeden bir tuşa basıldığında, kendisine parametre olarak geçilen fonksiyonun çalıştırılmasını sağlar. ’tus’ parametresi, klavyeden basılan tuşu, x ve y parametreleri ise tuşa basıldığı andaki fare konumunun koordinatlarını belirtir.
void glutSpecialFunc(void(*Func)(int tus,int x,int y)); Bu fonksiyon, ’F’ tuşları için kullanılır.
int glutGetModifiers(); Klavyede herhangi bir tuşa basılmış iken, CTRL-ALT-SHIFT tuşlarından birine basılıp basılmadığını belirtir. Geri dönüş değeri basılan tuşu belirtir. Bu değer, GLUT_ACTIVE_SHIFT, GLUT_ACTIVE_CTRL, GLUT_ACTIVE_ALT değerlerinden birisi olabilir.
* Fare İşlemlerini Yapan Fonksiyonlar :

void glutMouseFunc(void(*Func)(int tus,int durum,int x,int y)); Farenin herhangi bir tuşuna basıldığında veya basılı olan bir tuş bırakıldığında, kendisine parametre olarak geçilen fonksiyonu çalıştırır. ’tus’ parametresi farenin hangi tuşuna basıldığını belirtir. Bu parametre, GLUT_LEFT_BUTTON, GLUT_RIGHT_BUTTON, GLUT_MIDDLE_BUTTON değerlerinden birisini alabilir. Durum parametresi tuşun durumunu belirtir. Tuş o anda ya basılıdır, ya da basılı değildir. Bu parametre de GLUT_UP veya GLUT_DOWN değerlerinden birisini alabilir. x ve y parametreleri ise farenin ekrandaki koordinatlarını belirtir.
void glutMotionFunc(void(*Func)(int x,int y)); Herhangi bir tuş basılı olarak tutulup fare hareket ettirildiği zaman, kendisine parametre olarak geçilen fonksiyonu çalıştırır.
void glutPassiveMotionFunc(void(*Func)(int x,int y)); Herhangi bir tuşuna basılmaksızın fare hareket ettirildiği zaman, kendisine parametre olarak gönderilen fonksiyonu çalıştırır.
void glutEntryFunc(void (*Func)(int durum)); Fare pencere sınırlarına girdiğinde veya pancere sınırlarından çıktığında, kendisine parametre olarak gönderilen fonksiyonu çalıştırır. Durum parametresi pencere sınırları içerisinde veya dışarısında olunduğu bilgisini verir. Bu parametre GLUT_ENTERED veya GLUT_LEFT değerlerinden birisini alabilir.
GLUT kütüphanesi daha birçok fonksiyon içermektedir. Bu fonksiyonlara ilişkin ayrıntılı bilgilere internetten ulaşabilirsiniz.

GLUT kütüphanesini kullanarak geliştirdiğimiz uygulama, önceki yazımızda incelediğimiz uygulamaye benzer şekilde bir çizim penceresi oluşturuyor. Uygulama için Microsoft Visual C++ 6.0’ı kullandım. Uygulamayı sıfırdan oluşturmak için VC 6.0’ı açıp sırasıyla, ’File-->New-->Projects-->Win32Application-->An Empty Project’ komutlarını verin. Derleyiciye GLUT ve OpenGL kütüphanelerini kullanacağımızı belirtmek üzere ’Project-->Settings-->Link-->Object/Library Modules’ kutucuğuna (opengl32.lib, glu32.lib, glut32.lib) isimlerini ekleyin. Artık projenizde GLUT ve OpenGL kütüphane fonksiyonlarını kullanabilirsiniz. Şimdi geliştirdiğimiz uygulamayı adım adım inceleyelim. Öncelikle başlık dosyamızı kaynak kod dosyamızın başına ekleyelim :

#include <GL/glut.h>
DrawShape isimli fonksiyonumuz, pencereyi oluşturduktan sonra bu pencere üzerinde çizim işlemlerini gerçekleştirecek olan fonksiyondur. Bu fonksiyonu glutDisplayFunc GLUT kütüphane fonksiyonuna parametre olarak geçeceğiz. Tüm çizim işlemleri bu fonksiyonda yer alacaktır. Bu uygulamada boş bir çizim penceresi oluşturacağımız için fonksiyonun kodunda herhangi bir çizim ifadesi yer almamaktadır.

void DrawShape(void)
{
    glClear(GL_COLOR_BUFFER_BIT);
    glFlush();
}
DrawShape fonksiyonu sadece ekranı temizleyerek siyaha boyamaktadır. glClear ve glFlush fonksiyonları OpenGL kütüphanesine ait fonksiyonlardır. Henüz bir GLUT fonksiyonu kullanmadık. Şimdi uygulamamızın main fonksiyonunu inceleyelim :

int main(int argc,char **argv)
{
    glutInit(&argc,argv);
    glutCreateWindow("GLUT kullanarak OpenGL penceresi olusturmak");
    glutDisplayFunc(DrawShape);
    glutMainLoop();
    return 0;
}
Main fonksiyonumuzun argümanları, glutInit GLUT kütüphanesi fonksiyonuna geçilmelidir. Bu fonksiyon, yukarıdaki tanımlamalardan hatırlayacağınız üzere GLUT kütüphanesini kullanmaya başlamadan önce mutlaka çağrılmalıdır. Bu çağrıdan sonra, bir pencere oluşturan glutCreateWindow GLUT kütüphane fonksiyonu çağrılıyor. Bu fonksiyonun parametresi, oluşturulan pencerenin başlığı olarak kullanılmaktadır. glutDisplayFunc GLUT kütüphane fonksiyonuna yukarıda hazırlamış olduğumuz DrawShape fonksiyonu parametre olarak geçiliyor. DrawShape fonksiyonunda da oluşturulan pencere üzerinde çizim işlemleri yapılmaktadır. glutMainLoop GLUT kütüphane fonksiyonu da, sistemden gelen mesajların dinlenmesi işlemini başlatmaktadır. Programı bu haliyle çalıştırdığınız takdirde ekranda şu görüntüyü görmelisiniz :



Programı komut satırından bir komut satırı argümanı ile çalıştırarak, bu argümanı penceremize başlık olarak atamak istiyorsak kodumuzu şu şekilde değiştirebiliriz :

int main(int argc,char **argv)
{
    if (argc != 2) {
       printf("Calistirma Bicimi : copengl2.exe pencere_adi\n");
       return -1;
    }
    glutInit(&argc,argv);
    glutCreateWindow(argv[1]);
    glutDisplayFunc(DrawShape);
    glutMainLoop();
    return 0;
}
Bu sayede, programı komut satırından çalıştırırken geçeceğimiz bir parametre pencere adı olarak atanacaktır. Örneğin programı komut satırından ’copengl2.exe "GLUT Test Uygulamasi" ’ şeklinde çağırdığımızda karşımıza şu pencere çıkmalıdır :



Gördüğünüz gibi GLUT kütüphanesini kullandığımızda yazdığımız kod miktarında dikkate değer bir azalma oluyor. Çizim işlemleri için yine OpenGL kütüphanesindeki fonksiyonlardan yararlanılır. Önümüzdeki makalelerimizde bu konuya ayrıca değineceğiz.

Microsoft Visual C++ 6.0 ile birlikte kullanabileceğiniz OpenGL sihirbazını internette ’MFC OpenGL AppWizard’ ismi ile arattırarak bulabilirsiniz. Sihirbaz Jeff Burns tarafından geliştirilmiş ve değişiklikler göz önünde bulundurularak güncellenmektedir. Bu sihirbazı VC’nin ilgili klasörüne kopyaladıktan sonra VC’yi açtığınızda ve yeni bir projeye başlamak üzere ’File-->New’ komutlarını verdiğinizde ’Projects’ sekmesinde sihirbaza ilişkin birtakım seçenekler yer alacaktır : (Sihirbazla birlikte Jeff Burns tarafından yazılan, sihirbazın nasıl kullanılacağını ayrıntılı bir şekilde anlatan bir dosya da bulunmaktadır. Bu dosyayı okuyarak bilgi edinebilirsiniz.)



Örneğin buradan ’MFC OpenGL AppWizard’ seçeneğini seçtiğinizde sihirbaz açılarak projeyi oluşturmanızda size yardımcı olacaktır. Bu araçları kullanmadan kod yazma yolu ile yapabileceğimiz bazı işlemler bu araçlarla otomatik hale getirilmiştir. Örneğin GLUT ile sisteme ilişkin işlemleri otomatik oalrak yapabiliyorduk. Bu sihirbazı kullanarak da ekran görünümüne, derinlik ayarlarına, çözünürlüğe vb konulara ilişkin birçok ayrıntıyı otomatik olarak yapabiliyoruz. Sihirbazı izleyerek adım adım tüm seçenekleri ayarladıktan sonra ilgili kod dosyaları sihirbaz tarafından bizim için otomatik olarak oluşturulmaktadır. Nu kaynak kod dosyaları üzerinde değişiklikler yaparak çeşitli uygulamalar da geliştirebiliriz. Sihirbazın adımlarında varsayılan değerleri değiştirmeden bir proje oluşturduğumuzda karşımıza şöyle bir ekran çıkmaktadır :



Önümüzdeki makalelerimizde OpenGL ile çizim işlemlerini incelemeye devam edeceğiz. Hazırladığımız uygulamayı buradan indirebilirsiniz. Herkese mutlu günler dilerim...

* Kaynaklar :
   - The OpenGL Utility Toolkit (GLUT) Programming Interface - API Version 3
      Mark J. Kilgard
   - Visual C++ MFC openGL AppWizard,
      Jeff Burns


Makale:
C ve OpenGL : GLUT Kütüphanesinin Kullanımı C ve Sistem Programlama Çiğdem Çavdaroğlu
  • Yazılan Yorumlar
  • Yorum Yaz
MAY
3
2010
Glut'ı c# a nasıl ekleyeceğim söylermisiniz....
TEM
15
2005
Gökhan, Teşekkür ederim. Siyah pencerelerimiz önümüzdeki yazıda şekillenecek. Ayrıntılı bir konu olduğu için adım adım ilerlemeyi tercih ettim. Bir çizim, siyah boş bir pencere ile başlıyor :) Asa asa, Inventor kütüphanesini de ele alabiliriz, haklısın. Konuları biraz daha ilerlettikten sonra bu kütüphaneyi de inceleriz.
TEM
14
2005
Çiğdemciğim, yine güzel ve başarılı bir makaleyle karşımıza çıkmışsın. Başarılarının devamını diliyorum. (Birde siyah pencerelerden vazgeçsen, pencereyi açmışken bir nefes alsak)Sevgilerle...
TEM
14
2005
hazır bu konuya girmişken bide inventor kütüphanesi makalesi olsa fena olmaz.
Sayfalar : 1 
Yorum yazabilmek için üye girişi yapmalısınız. Üye girişi için tıklayın.
Üye değilseniz Üyel Ol linkine tıklayarak üyeliğinizi hemen başlatabilirisniz.
 
  • Bu Konuda Son 10
  • Eklenen Son 10
  • Bu Konuda Geçmiş 10
Bu Konuda Yazılmış Yazılmış 10 Makale Yükleniyor
Son Eklenen 10 Makale Yükleniyor
Bu Konuda Yazılmış Geçmiş Makaleler Yükleniyor