Kafeslerde boole işlemleri


15

Her kafes için bir dizi köşe ve üçgen verilir. Herkes bir algoritma ya da adı geçen kafeslerde boolean işlemleri gerçekleştirmek ve ortaya çıkan mesh için bir dizi köşe ve üçgen almak için (ilk önce google denedim ama başlamak için iyi bir yer bulamadım) bakmak için bir yer veya bir yer biliyor mu? Özellikle ilgi çekici olan çıkarma ve birleşme.

Örnek resimler: http://www.rhino3d.com/4/help/Commands/Booleans.htm

Yanıtlar:


10

Bunu Yapıcı-Katı-Geometri (CSG) olarak düşünüyorum. Umarım burada biraz yardım bulabilirsiniz.

http://www.alsprogrammingresource.com/csg.html

http://createuniverses.blogspot.com/2009/09/qtcsg-constructive-solid-geometry.html

http://www.nigels.com/research/

Ayrıca başlangıç ​​olarak Google'da Yapıcı Katı Geometri'yi arayın.

HTH


+1 - Ben de aynı bağlantıları paylaşacaktım, JustBoo - beni dövdüğünü fark edene kadar! :)
jacmoe

Teşekkürler! Yapıcı-Katı-Geometri terminolojisi tam olarak ihtiyacım olan şey!
lathomas64

@jacmoe - İronik şimdi şaşırtıcı ve tam :-) Bazıları için kredi hak ediyorsun. Teşekkür.
JustBoo

bunlardan bazıları ? : PI, hepsini oraya not ettiğime inanıyorum. : D Yine de, bunlar sadece temel CSG şeyleridir. Oradan oldukça kıllı oluyor - büyük ticari modelleme paketleri bile doğru değil.
jacmoe

3

Sadece düşünürsek çözebiliriz diye düşünüyorum.

Açıkça, iki geometrinin kesiştiği yüzler (üçgenler) oluşturmak istersiniz. Sonra üç ağ ile kalırsınız: yeni izole ettiğiniz kavşak, geometri 1 ve geometri 2.

Ardından, ihtiyacınız olmayan şeyleri silin!

  • BooleanDifference: izole edilmiş parçayı ve geometriyi silin 2.
  • Boolean Kavşağı: İzole edilmiş parçayı bırakarak geometri 1 ve 2'yi silin
  • BooleanUnion: geometri 1 ve 2'yi birleştirin ve izole edilen parçayı silin (geometri 1 ve 2'yi sağlam bir geometriye birleştirdiğinizden emin olun)
  • BooleanSplit: Geometri 1'i, geometri 2'yi ayırın ve izole edilen parçayı çoğaltın (birini geometri 1'e, diğeri geometri 2'ye ekleyin)

Sanırım bunu kapsıyor, ha? Zor kısım açık bir şekilde kavşak yüzleri yaratacaktır. Bunun için, birinin her bir yüzünü yineleyin ve bu yüzün diğerinin bir parçası olup olmadığını kontrol edin; tamamen içerideyse, yüzü kavşak ağının bir parçası olarak kopyalayın. Kısmen içerideyse, üçgeni kesişim çizgisi boyunca bölmeniz gerekir; DirectX ve OpenGL'nin her ikisi de bunun için yardımcı işlevlere sahip olacağını veya sadece bazı 3D düzlem matematik (vektörler) olacağını düşünüyorum. Matematik 3'te böyle bir şey öğrendim (ya da 2 miydi?) Ama bir ipucunuz yoksa , belki de math.stackexchange.com'a sorun . Ve sonra elbette yüz dışarıdaysa, hiçbir şey yapmayın. Her iki kafesin tüm yüzlerini yinelediğinizde, kesişme kafesiyle kalacaksınız.


2

Çokgen modellerle uğraşıyorsanız, manifold olmayan geometri ile uğraşmanız gerekebilir, bu da "içeride" ve "dışarıda" neyin tanımlanmadığı anlamına gelir. 0 veya 1'iniz olup olmadığını bilmiyorsanız, bir boolean işlemi gerçekleştirmek zordur.

Ayrıca, eş düzlemsel çokgenler, kenarları kesen çokgenler, kenarlarda ve / veya yüzlerde bulunan köşeler ve o türden şeyler gibi saçma vakalarla da uğraşmak zorundasınız. Bunların hiçbiri imkansız değil, sadece mesh verilerinizi temsil etmenin çok sağlam bir yoluna ve bu durumlarda ne olmasını beklediğinize dair sıkı bir tanımlamaya ihtiyacınız var.


1

Operasyonlarınızın çoğunun, bazı geometrilerin olumsuzlanmasının normalleri ters çevrilmiş geometri olduğu negatif ve birleşmeyle temsil edilebileceğini belirtmek gerekir. Bu yüzden sendikayı doğru bir şekilde yakalayabiliyorsanız, diğer operasyonlar sadece şunları yapmalıdır:

  • kavşak (A, B): =! birleşim (! A,! B)
  • çıkarma (A ve B): =! birleşim (! A, B)

Sander'in CSG uygulamalarını tartışan oldukça iyi blog yazıları var: http://sandervanrossen.blogspot.com/search/label/CSG


1
Kendi CSG eşyalarımdan bahsedecektim, ama görünüşe göre başka biri zaten yaptı: O)
Sander van Rossen

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.