Appel'in Gizli Çizgi Kaldırma Algoritması için kontur çizgileri nasıl bulunur


10

Eğlence için DCPU-16 için bir tel çerçeve görüntüleyici yapmaya çalışıyorum . Tel çerçevede gizlenen çizgileri gizleme dışında her şeyi nasıl yapacağımı anlıyorum. SO'daki tüm soruların hepsi OpenGL'ye erişiminiz olduğunu varsayar, maalesef DCPU-16 (veya herhangi bir donanım hızlandırma) için böyle bir şeye erişimim yok.

Google Kitaplar'da Appel'in algoritmasının oldukça iyi bir tanımını buldum . Ancak çözemediğim bir sorun var.

Öne bakan kontur çizgisini, öne bakan ve arkaya bakan bir çokgen tarafından paylaşılan bir kenar veya kapalı bir polihedronun parçası olmayan, öne bakan bir çokgenin paylaşılmamış kenarı olarak tanımlayın. Öne bakan iki çokgen tarafından paylaşılan bir kenar görünürlükte değişime neden olmaz ve bu nedenle kontur çizgisi değildir. Şekil 8.4'te AB, EF, PC, GK ve CH kenarları kontur çizgileriyken, ED, DC ve GI kenarları değildir.

Şekil 8.4

Algoritmanın kurallarını ve kontur çizgileriniz olduğunda nasıl çalıştığını anlıyorum, ancak bir kenarın öne bakan ve arkaya bakan bir çokgen tarafından paylaşılıp paylaşılmadığını belirlemek için ne yapmam gerektiğini anlamıyorum veya "kodlama açısından kapalı bir polihedronun parçası olmayan, öne bakan bir çokgenin paylaşılmayan kenarı ". Bir şekle bakabilirim ve kafamda hangi çizgilerin kontur çizgileri olduğunu biliyorum ama bu "anlayışı" kodlanmış bir algoritmaya nasıl aktaracağım hakkında bir fikrim yok.


Güncelleme

Kontur çizgilerini belirlemede bazı ilerlemeler kaydettim. Bu iki ders notunu bir Buffalo Üniversitesi dersinden bilgisayar grafikleri üzerinde buldum .

resim açıklamasını buraya girin

Kenarları düşünün. Bunlar üç kategoriye ayrılır.

  1. İki görünmez yüzü birleştiren bir kenarın kendisi görünmezdir. Bu listeden silinecek ve yok sayılacaktır.
  2. Potansiyel olarak görülebilen iki yüzü birleştiren bir kenara "malzeme kenarı" denir ve daha fazla işlem gerektirir.
  3. Potansiyel olarak görülebilen bir yüzü ve görünmez bir yüzü birleştiren bir kenar, 'malzeme kenarı' için özel bir durumdur ve ayrıca 'kontur kenarı' olarak adlandırılır.

Yukarıdaki iki bilgiyi kullanarak bunu kod olarak yazabilmeye yaklaşabiliyorum, ama yine de gidecek çok yolum var.



1
Üçgenin normal hesaplanmasında bu cevabı kontrol edin . Görüş çizgisi vektörüne sahip normal vektörün nokta çarpımı, bir üçgenin öne bakan olup olmadığını belirler.

Yanıtlar:


3

"-Facing" kuralının geçerli olması için, tüm yüzlerin doğru yönlendirildiğinden emin olmalısınız. Örneğin sağdaki kuralı kullanın, yani bir yüzün köşeleri, yüz düzlemindeki pozitif bir dönüşün çokyüzlünün dışındaki normal bir işarete karşılık geleceği şekilde numaralandırılması gerektiği anlamına gelir. (Anladım mı?) Ya da daha basit olarak, her yüz dışa dönük normaliyle gelmelidir.

Kapalı bir polihedrona ait olmayan sarkan yüzler, belirsiz bir yönelime sahip olarak görülebilir.

Bir kenarın bir kontur çokgeniyle gizlenen kısımlarını hesaplamak ana derstir. Bu sorun, bir çizgi parçasını 2B'de çokgen bir pencere ile kırpma sorununa çok yakındır. İlk önce çizgi segmentinin destek hattını düşünün ve çokgen ile kesişme noktaları bulun. Eşlik kuralı kullanarak, çokgenin içindeki ve dışındaki parçaları kolayca belirleyebilirsiniz.

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.