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
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