OpenGL Nesne Seçimi (Object Picking)


Yazan : Şadi Evren ŞEKER

Bu yazının amacı bilgisayar grafiklerinde kullanılan OpenGL kütüphanesi marifetiyle ekranda bulunna 3 boyutlu nesnelerden birisinin fare ile tıklandığında nasıl algılandığını anlatmaktır.

Ekrandan seçme işlemi yapılabilmesi için aşağıdaki 6 adımın izlenmesi gerekir:

  1. Öncelikle ileride kullanılmak üzere seçilen nesneleri tutan ve glSelectBuffer isimli fonksiyon ile ilk değerini alacak olan bir dizinin tanımı
  2. Seçme işleminin aktif olabilmesi için GL_SELECT mod’unu glRenderMode() fonksiyonuna parametre vermek.
  3. Seçilmiş nesneleri tutan yığının (Stack) ilklenmesi için glInitNames ve glPushName fonksiyonlarının çağrılması
  4. Seçme işlemi sırasında kullanılacak olan görüntü alanın (viewing Volume) belirlenmesi. Bu görüntü alanı çizim sırasında kullanılan alandan farklıdır.
  5. Çizim işlemlerinin yapılması ve bu sırada çizilen nesnelere isin verilmesi
  6. Seçme durumundan çıkarak seçilmiş nesnenin işlenmesi


« Java Bean   |   OpenGL İsim Dizisi »



Yorumlar

Kullanıcı girişi yaparak ya da zorunlu olan * alanlarını doldurarak yorum yapabilirsiniz.

İsminiz *

Email adresiniz *

Web siteniz

Mesajınızı buraya yazabilirsiniz:

Toplam 4 yorum var.

  1. Abdurrahman ulusoy | 31 May 2009, 17:26

    http ://cadcizim.googlepages.com/
    da görülebileceğiniz üzere linuks için 2/3 boyutlu cad yazılımı geliştirmeye çalışıyorum. 3 boyutlu çizimleri opengl ile

    http ://cadcizim.googlepages.com/czm1.avi.tar.gz

    bu avi dosyasından görebileceğiniz gibi oluşturuyorum. ancak anlattıklarınızı tam anlıyamadığım için opengl penceresinden seçim yapamıyorum.
    Yardım ederseniz çok sevinirim.
    iyi günler

  2. Şadi Evren ŞEKER | 01 Jun 2009, 03:46

    Sitenizi ve demo filminizi izledim. Öncelikle bu tip çalışmaların olması çok güzel ve çalışmalarınızda başarılar dilerim.
    OpenGL ve bilgisayar grafikleri ile ilgili daha fazla örnek kod ve detay için geçmişte bu dersi verirken hazırladığım http: //www.sadievrenseker.com/graf adresindeki sitemi inceleyebilirsiniz.

    Sorunuzun cevabına gelirsek. Nesne seçimi ile ilgili openGL programlamanın kutsal kitabı sayılabilecek kırmızı kitapta (redbook) http: //glprogramming.com/red/chapter13.html adresi altında bir bölüm boyunca sizin istediğiniz konu anlatılmış. Ayrıca örnek kod bulunuyor. http: //www.opengl.org/resources/code/samples/redbook/pickdepth.c adresinden erişebilirsiniz. Bu bilgi yeterli olmaz ya da ingilizce sorununuz varsa lütfen iletişime geçin sizin için detaylı bir açıklamayı siteye eklerim.

    Başarılar

  3. Abdurrahman ulusoy | 04 Jun 2009, 00:38

    selamlar
    öncelikle ilginiz için teşekkürler.
    Mesajda verdiğiniz adresleri inceledim. Temel iki sorunum oldu.
    1. örneklerin hepsi glut kütüphanesini kullanıyor. ancak kedicadi gambas la geliştiriyorum ve gambas glut kütüphanesini desteklemiyor. Bu yüzden kullanamadım.
    2. Tahmin ettiğiniz gibi ingilizcem yetersiz.
    Eğer seçimi ders olarak sitenize eklerseniz. çok sevinirim.

    Bu arada sitenizi inceledim. İlginizi çekeceğini düşündüğüm sorunlarım var.
    2 boyutlu çizimleri oluşturduktan sonra Kapalı çizimi gl penceresine aktarırken quad , triangles , polygon şeklinde aktarmam gerekiyor. ancak gelişigüzel bir çizimin geometrisinden dolayı genelde düzgün olarak aktaramıyorum. kapalı alanı üçgen ve dörtgen parçalara ayırarak gl penceresine aktarmaya çalışıyorum. bunun içinde kapalı çizimin iç tarafında mı dış tarafında mı olduğunu programa anlatamıyorum.
    http: //cadcizim.googlepages.com/3bhata.jpg
    burada da görebilirsiniz. quad seçili olduğu için dikdörtgen şeklindeki çizim 3 boyuta düzgün kutu olarak aktarılırken gelişigüzel bir çizimde alt ve üst kapatmalar düzgün değil.
    Teşekkürler/selamlar.

  4. Abdurrahman ulusoy | 28 Feb 2010, 14:57

    Merhaba hocam
    Üstteki mesajımda bahsettiğim sorunu poligonları üçgenlere bölerek çözdüm. Artık kendini kesmiyen poligonları üçgenlere bölerek doğru bir şekilde 3 boyutlu hale getirebiliyorum.
    http://site.mynet.com/ulusoyab/ulusoyab/id1.htm
    adresinde konuyu anlattım. ayrıca kaynak kodlarını da ekledim.

    Sorunum 2 boyuttan 3 boyuta sadece uzatma (extrude) ile geçebiliyorum. bir eksen etrafında döndürerek nasıl 3 boyutlu nesneler elde edebilirim. Bu işlemide yapabildim mi KediCAD3B çok daha iyi bir noktaya gelecek.
    Not: üçgenleme konusunda çok az Türkçe kaynak var. Ve sizin siteniz Bilgisayar grfiği uğraşanların iyi takip ettiği bir yer. isterseniz üçgenlere bölme konusuna burada da yer verirseniz çok iyi olur.
    Selamlar

Bu Yazı Hakkında

Bilgisayar Kavramları üzerinde şu anda okumakta olduğunuz 'OpenGL Nesne Seçimi (Object Picking)' isimli yazı 06 Jan 2009 tarihinde, saat: 12:00 'de Şadi Evren ŞEKER tarafından gönderilmiş, toplam 982 defa okunmuştur.

Benzer yazıları Bilgisayar Grafiği (Computer Graphics) 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.


Yazarın Kitabı

Bu yazının yazarı Şadi Evren ŞEKER'in son çıkan kitabı "Programlama ve Veri Yapılarına giriş (C, C++ ve JAVA ile)" hakkında bilgi almak için Buraya tıklayabilirsiniz.
Eklenen Son Yazılar
Yapılan Son Yorumlar
Yakın Yazılar
Bağlantılar