Donanımla hızlandırılmış eğri şekillerin çizimi


11

Hızla kavisli bir şekil nasıl çizilir?

  • "çabuk" diyerek, donanım olanaklarını mümkün olduğunca kullanması gerektiğini düşünüyorum

  • "kavisli" ile kuadratik veya kübik Bezier eğrileri tarafından tanımlanan sınırları kastediyorum

  • "şekil" ile kastediyorum, ya "yağ" konturu (yani 1 pikselden daha geniş) ya da çift-tek / sıfır olmayan dolgulu "2D kavisli çokgen", muhtemelen delikli (yani "O" harfi)

Soruyorum çünkü bildiğim seçeneklerin birkaç dezavantajı var:

  • şekli üçgenleme ve OpenGL'ye gönderme - CPU üzerinde en zor işi yapar ve çok fazla / az üçgen kullanabilir (yani savurgan / kaba)

  • doku atlası - her değişiklikte (şekil, ölçek, döndürme, ...) dokuyu yeniden hesaplamak / yüklemek zorundadır

  • İmzalı mesafe alanı - büyük ölçeklerde ayrıntılar hoş görünmüyor veya dokuyu yeniden hesaplamak / yüklemek zorunda

  • NV_path_rendering - sadece Nvidia'nın kartlarında çalışmıyorsa olabilir

  • OpenVG - sadece mobil cihazlarda çalışmıyorsa olabilir

  • ?


* Bana öyle geliyor ki OpenVG hafifçe söylemek gerekirse tam olarak ilerlemiyor. Gelecekteki beklentileri hakkında bir şey bilen var mı? Günümüzde göz kulak olmak hiç bir işe yaramaz mı?

** OpenGL 4+, çokgenlerin anında mozaik döşenmesi için araçlar sağlar. Bir şekilde örgüyü "üçgenleme" seçeneğinden inceltmek için kullanılabilir, böylece şekil sınırı en azından "açılı" görünmez mi?


2
Bu GPU Mücevherleri makalesi, gövdenin kavisli kısımlarını tanımlayarak ve piksel gölgelendiricideki kapsamı analitik olarak hesaplayarak karesel eğrileri rasterleştirir, bir göz atmaya değer olabilir: developer.nvidia.com/gpugems/GPUGems3/gpugems3_ch25.html
yuriks

2
@yuriks Evet, Loop & Blinn, tamamen unuttum. Ama patentli değil mi?
Ecir Hana

Ayrıca bkz . SIGGRAPH Asia 2014'te yayınlanan Devasa Paralel Vektör Grafikleri .
lhf

Sorunuzda listelediğiniz seçenekler ile Döngü ve Yanıp sönen kağıt arasında, tüm olasılıkları tükettiğini düşünüyorum.
Nathan Reed

Burada anlatıldığı gibi bir çizgi döşeyebilirsiniz . Veya bir bilgisayar gölgeleyicisinde üçgen oluşturabilirsiniz.
nikitablack

Yanıtlar:


2

Bezier kontrol noktalarını çokgenlere dönüştürmek için OpenGl 4.x mozaik gölgeleyicileri kullanabilirsiniz.

"Mozaiklik gölgelendirici bezier" için yapılan bir Google araması, Bezier yüzeylerinin ve eğrilerinin mozaiklemesini açıklayan bu taslağı buldu:

http://web.engr.oregonstate.edu/~mjb/cs519/Handouts/tessellation.1pp.pdf

Bu, Bezier değerlendirmesini CPU'dan GPU'ya yükler ve veri yolu üzerindeki veri akışını azaltır.


3
Bu cevabı biraz ayrıntılandırarak veya hatta daha fazla açıklayan bir şeye bağlayarak geliştirebilirsiniz.
Nathan Reed

1
Bu cevabı genişletmenin bir yolu, yazarın bahsettiği dezavantajları ele almak ve yaklaşımınızın bunlara nasıl yardımcı olduğunu açıklamaktır.
trichoplax

0

Bir donanım ile kavisli çizim yapabilirsiniz. GPU Gems 3'te bunun nasıl yapılacağını açıklayan bir yöntem vardır . @Yuriks kullanıcısı bunu gerçekten yorumlar. Aslında bir göz atmanız için hızlı bir şekilde kirli bir demo yaptım.

eğri

Resim 1 : HW hızlandırılmış eğri şekillendirme (bir üçgen kullanılarak çizilmiş) ve webgl kaynağı

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.