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:
- Öncelikle ileride kullanılmak üzere seçilen nesneleri tutan ve glSelectBuffer isimli fonksiyon ile ilk değerini alacak olan bir dizinin tanımı
- Seçme işleminin aktif olabilmesi için GL_SELECT mod’unu glRenderMode() fonksiyonuna parametre vermek.
- Seçilmiş nesneleri tutan yığının (Stack) ilklenmesi için glInitNames ve glPushName fonksiyonlarının çağrılması
- 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.
- Çizim işlemlerinin yapılması ve bu sırada çizilen nesnelere isin verilmesi
- Seçme durumundan çıkarak seçilmiş nesnenin işlenmesi
« Java Bean | OpenGL İsim Dizisi »
Yorumlar
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
- Visual Basic ile Gösterici (Pointer) Kullanımı
- Hasse Çizgeleri (Hasse Diagrams)
- Zeki Vekiller (Akıllı Ajanlar, Intelligent Agents, Zeki Etmenler )
- Integral Kriptoanalizi ( Toplam Tecessüsü , Integral Cryptoanalysis)
- Diferansiyel Kriptoanalizi ( Fark Tecessüsü , Differential Cryptoanalysis)
- Sierpinski Üçgeni (Sierpinski Triangle)
- C ile programlamaya giriş final sınavı çözümleri
- Çok Seviyeli Sıralar (Multi Level Queues)
- Çift Özetleme (Double Hashing)
- İkinci Dereceden Sondalama (Quadratic Probing)
Yapılan Son Yorumlar
- Şadi Evren ŞEKER: Null, NULL, nil veya null olarak...
- Fatih Kabakci: hocam merhabalar,...
- kara: Çok güzel anlatılmış gerçekten teşekkürler...
- Şadi Evren ŞEKER: Bahsettiğiniz şekil dönüşümü...
- Caner: Kullanıcıdan açı girdisi almıyorsanız...
- Furkan Yediyildiz: Algoritmanin mantigi cok güzel...
- havva: çok sağolun çok güzel açıklamalar var tşk...
- Şadi Evren ŞEKER: typedef komutu, bir yapıdan yeni bir...
- fatih kabakci: hocam ben structures ile ilgili bir sorum...
- Şadi Evren ŞEKER: evet, yukarıda açıklanan, herhangi...
- Abdurrahman ulusoy: fi açısından teta kadar döndürme...
- Şadi Evren ŞEKER: Hayır yok, bir noktanın, herhangi...
- Abdurrahman ulusoy: Bu durumda yukarıdaki formüllerin...
- Abdurrahman ulusoy: Merhaba hocam Üstteki mesajımda...
- mustafa ekmekcioğlu: merhaba şadi bey ben hacettepe...
- Şadi Evren ŞEKER: Talebiniz üzerine...
- Evren Kocaturk: ve bunu matlab üzerinde, gerekli...
- Evren Kocaturk: teşekkürler, işime yarayacak gibi,...
- tuncay çavuşoğlu: Şadi bey teşekkürler.Kısa ve...
- attila: hocam bunun bir örneginide Visual Basic diliyle...
Yakın Yazılar
OpenGL Nesne Seçimi (Object Picking)
OpenGL Geometrik Nesneler (Geometric Objects)
Nesne serileme ve dizme (Object Serialization , Marshalling)
Kütük (stub, nesne vekili, object Proxy)
Nesne sıralama ve dizme (Object Serialization , Marshalling)
Nesne Yönelimli Programlama (Object Oriented Programming)
Mafsallı Tasarım (Articular Design)
OpenGL ve Kamera Görüntüsü (Camera Viewing)
fonksiyonel programlama (functional programming)
RDF (Resource Description Framework, Kaynak Tanım Çerçevesi)
Bağlantılar
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
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
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.
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