Ressam algoritmasıyla nasıl doğru sonuçlar elde edilir?


14

Bir süre önce bir yüzün ne zaman bir başkasının üst üste geleceğini nasıl belirleyeceğimi sordum. Tavsiye, bir Z tamponu kullanmaktı.

Ancak, şu anki projemde bir Z-buffer kullanamıyorum ve bu yüzden Ressamın algoritmasını kullanmak istiyorum. Yine de, bir yüzeyin bir başkasının arkasında veya önünde olduğu konusunda iyi bir fikrim yok. Çok sayıda yöntem denedim ama hepsi kenar durumlarda başarısız ya da genel durumlarda bile başarısız.

Bu şimdiye kadar denedim sıralama yöntemlerinin bir listesidir:

  • Her yüzün orta noktasına olan mesafe
  • Her yüzün her bir tepe noktasına ortalama mesafe
  • Her tepe noktasının ortalama z değeri
  • Her yüzün köşelerinin en yüksek z değeri ve önce bunları çizin
  • Her yüzün köşe değerlerinin en düşük z değeri ve sonuncusunu çiz

Sorun şu ki, bir yüz daha yakın bir mesafeye sahip olabilir, ancak yine de daha uzaktadır. Tüm bu yöntemler güvenilir görünmüyor.

Düzenleme: Örneğin, aşağıdaki görüntüde mavi nokta daha yakın olduğu için orta nokta olarak mavi nokta ile yüzey orta nokta olarak kırmızı nokta ile yüzey üzerine boyanır. Ancak bunun nedeni, kırmızı noktanın yüzeyinin daha büyük olması ve orta noktanın daha uzakta olmasıdır. Kırmızı noktalı yüzey mavi olanın üzerine boyanmalıdır, çünkü daha yakındır , orta nokta mesafesi ise tam tersini söyler.

resim açıklamasını buraya girin

Ressamın algoritmasında nesnelerin hangi sırayla çizilmesi gerektiğini belirlemek için tam olarak ne kullanılır?


1
Ressamlar algoritması sadece arkadan öne doğru çekiyor.
Jonathan Connell

1
@ 3nixios: Evet, açıkçası, ama 'önden arkaya' sırasını ne şekilde belirleyebilirim?
pimvdb

1
Çizime başladığınızda tüm nesneleriniz, üçgenleriniz veya köşeleriniz kameradan belirli bir mesafede olacaktır. Temel algoritmayı uygulamak (başarılı oldunuz mu?), Her bir üçgen için kameradan bu mesafeyi belirlemek ve bunları en yakından en yakına doğru çizmek olacaktır. Bu yapıldıktan sonra, tamamen farklı bir top oyunu olan kavşakları aramaya ve üçgenlerinizi kesmeye başlamanız gerekir . Z-Buffer'ı neden zaten kullanamıyorsunuz? : P
Jonathan Connell

@ 3nixios: Tamamen haklısın, ama karşılaştığım problem mesafeyi hesaplamak. Dediğim gibi, birkaç mesafe yöntemi denedim ama hepsi mükemmel değil. Bu sipariş orta nokta uzaklık sıralamasından kaynaklanır: i.imgur.com/AcfCm.png .
pimvdb

1
Tüm çokgenleriniz böyle bir ızgarada mı? Eğer öyleyse bunu iyileştirmek için yapabileceğiniz şebekeye özgü şeyler olabilir.
CiscoIPPhone

Yanıtlar:


14

Genellikle bir çokgenin orta noktasının kameraya olan mesafesi z-sıralama için kullanılır. Ressamın algoritması doğası gereği% 100 doğru olamaz. Hangi referans noktasını kullanırsanız kullanın, her zaman sıralama işleminin başarısız olacağı durumlar olacaktır.

Ressamın algoritmasıyla doğru z-sıralama istiyorsanız, üst üste gelen çokgenleri daha küçük parçalara (örneğin, dört ağaç kullanarak) dilimlemeniz ve bu parçaları ayrı ayrı sıralamanız gerekir. Bu CPU'da oldukça ağır olabilir.

Sorunu güzel bir şekilde gösteren bu Powerpoint dosyasını buldum ( PDF Sürümü ).


Bu Powerpoint için teşekkürler, sorunu çözmeme yardımcı oldu.
pimvdb

Bağlantı koptu. Biri bir kopya bulabilir mi?
Keavon

1
@Keavon Düzenlendi. Dosya için çalışan bir bağlantı buldum.
bummzack

1

Bu gibi durumlarda benim için hep bsp ağaçları kullanarak çalıştı. Bsp-ağacının düğümünde dışbükey bir çokgen seti olana kadar sahneyi bölün ve ardından çokgenleri düğümler içinde kolayca sıralayabilirsiniz. Çokgenleri bsp ağacı düğümünden sıralayarak, yukarıda tarif ettiğinizle aynı sorun gibi göründüğünü, ancak çok açık olmayan bir durum olduğunu unutmayın - bsp ağacını oluşturduktan sonra tüm sorunlu durumlar zaten çözülmüştür - düğümde sona ermelisiniz dışbükeylik testinin geçmesi gereken çokgen kümesi ile - bu kümeden bir çokgenden bir düzlem seçerseniz, çokgenlerin geri kalanı ya düzlemin önünde ya da düzlemin arkasındadır. Bu bilgileri kullanmak sıralamayı kolaylaştırır - sıralama işlevi 2 çokgen alır - hangi ikinci yarığın 2. çokgene karşı 1. çokgen olduğunu ve ayrıca ikinci çokgene karşı kameranın yerleşimini kontrol edin.

Ayrıca, çokgenlere karşı kamera yerleşiminin yanını belirlemek ve bsp ağacının çapraz hareketini belirlemek için yapılan testlerin, ortografik ve perspektif projeksiyonu ile uğraşırken biraz farklı olduğunu unutmayın.

Eğer giriş çokgenlerini bölmeyi göze alamıyorsanız, bence şansınız kalmadı.

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.