2010-09-25 31 views
13

Opengl kullanarak voksel çizmek istiyorum ama desteklenmiyor gibi görünmüyor. Ben 24 köşe (yüz başına 4 köşe) olan bir küp çizim fonksiyonu yaptım ama 2500 küp çizdiğinizde kare hızını düşürür. Daha iyi bir yol olduğunu umuyordum. İdeal olarak, grafik kartına bir konum, kenar boyutu ve renk göndermek istiyorum. Fragment shader veya vertex shader'ın bir parçası olarak talimatları derlemek için GLSL kullanarak bunu yapabilir miyim emin değilim.Opengl'de voksel (küp) çekmenin en etkili yolu nedir?

Google'da arama yaptım ve nokta spriteları ve billboard sprite'ları hakkında bilgi aldım (aynı şey?). Bunlar bir küpün daha hızlı çizilmesine alternatif olarak kullanılabilir mi? Her bir yüz için 6 tane kullanırsam, grafik kartına çok daha az bilgi gönderiyor ve umarım bana daha iyi bir kare hızı kazanır gibi görünüyor.

Başka bir düşünce belki bir drawelements çağrısı kullanarak birden çok küp çizebilirim?

Belki de bilmediğim daha iyi bir yöntem var mı? Herhangi bir yardım takdir edilir.

cevap

12

Vokselleri küplerle çizmek neredeyse her zaman yanlış yoldur (istisnai durum, ışın izleme). Genelde yapmak istediğiniz şey, verileri 3B dokuya yerleştirmek ve kamera konumuna bağlı olarak dilimler oluşturmaktır. Bu sayfaya bakın: https://developer.nvidia.com/gpugems/GPUGems/gpugems_ch39.html ve "volume rendering gpu" yu arayarak başka teknikler bulabilirsiniz.

+0

Evet, görünüm yönü ile en hizalı olan eksen boyunca öne alın. Saydamlık ile dörtlükler oluşturarak başlayın. Bu işlemden sonra, her bir katman arasında "kenarları" yerleştirmeyi deneyebilirsiniz. – phkahler

+0

Bağlantınız şimdi bozuldu. – Ruslan

+0

@Ruslan – ybungalobill

5

Aradığınız şey instancing olarak adlandırılır. Birkaç olasılık için glDrawElementsInstanced ve glDrawArraysInstanced'a göz atabilirsiniz. Bunların sadece nispeten yakın bir zamanda çekirdek operasyon olarak eklendiğini (OGL 3.1), ancak uzantıları bir süre daha uzadıyabildiğini unutmayın. NVidia'nın OpenGL SDK nVidia'nın OpenGL'de örnek çizime sahip bir örneği vardır.

0

Önce GLSL kullanarak OpenGL 3+ 'e bakmanız gerekiyor. Bu oldukça uzun bir süredir standart olmuştur. İkincisi, Minecraft-esque uygulamalarının çoğunda CPU tarafında mesh oluşturma kullanılır. Bu teknik, tüm blok konumlarına bakmak ve tüm maruz kalan yüzlerin üçgenlerini oluşturan bir köşe tamponu nesnesi oluşturmayı içerir. VBO, yalnızca vokseller değiştiğinde ve çerçeveler arasında kalıcı olduğunda üretilir. İdeal bir uygulama, aynı dokudaki eş yüzleri daha büyük yüzlere birleştirir.