메시에 대한 부울 연산


15

각 메쉬에 꼭짓점과 삼각형이 주어집니다. 누구든지 알고있는 메쉬 또는 부울 연산을 수행하고 결과 메쉬에 대한 정점과 삼각형을 얻기 위해 알고리즘이나 찾고있는 장소를 알고 있습니까 (Google을 먼저 시도했지만 시작하기에 좋은 곳을 찾지 못했습니다)? 뺄셈과 노조가 특히 흥미 롭습니다.

사진 예 : http://www.rhino3d.com/4/help/Commands/Booleans.htm

답변:


10

저는 이것을 CSG (Constructive-Solid-Geometry)라고 생각합니다. 바라건대 여기에서 도움을 찾을 수 있기를 바랍니다.

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

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

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

또한 시작으로 Google에서 입체 솔리드 형상을 검색하십시오.

HTH


+1-JustBoo와 동일한 링크를 게시하려고했습니다. :)
jacmoe

감사! 용어 Constructive-Solid-Geometry는 정확히 내가 필요한 것입니다!
lathomas64

@jacmoe-아이러니는 놀랍고 완벽합니다 :-) 당신은 그 중 일부에 대한 크레딧을받을 자격이 있습니다. 고마워.
JustBoo

중 일부 ? : PI는 내가 그들 모두를 저기 저음으로 쳤다고 믿는다. : D 아직도, 그들은 기본적인 CSG 일뿐입니다. 그것은 거기에서 꽤 털이 나옵니다-주요 상업 모델링 패키지조차도 그것을 얻지 못했습니다.
jacmoe

3

생각 만하면 퍼즐을 풀 수 있다고 생각합니다.

두 도형이 교차하는면 (삼각형)을 만들고 싶을 것입니다. 그런 다음 방금 분리 한 교차점, 형상 1 및 형상 2의 세 가지 메쉬가 남았습니다.

그런 다음 필요없는 것을 삭제하십시오!

  • 부울 차이 : 분리 된 부품 및 형상 2를 삭제합니다.
  • BooleanIntersection : 형상 1과 2를 삭제하고 분리 된 부분을 남겨 둡니다.
  • BooleanUnion : 형상 1과 2를 병합하고 분리 된 부분을 삭제합니다 (형상 1과 2를 솔리드 형상으로 연결해야 함)
  • BooleanSplit : 형상 1, 형상 2를 분리하고 분리 된 부품을 복제합니다 (하나는 형상 1에, 다른 하나는 형상 2에 부착)

나는 그것을 덮고 있다고 생각합니다. 힘든 부분은 분명히 교차면을 만드는 것입니다. 이를 위해 한면의 각면을 반복하고 그면이 다른면의 일부인지 확인하십시오. 내부에 완전히 있다면면을 교차 메시의 일부로 복사하십시오. 부분적으로 안에 있다면, 교차 선을 따라 삼각형을 분할해야합니다. DirectX와 OpenGL은 모두 이것에 대한 도우미 기능을 가지고 있거나 3D 평면 수학 (벡터) 일 것이라고 생각합니다. 미적분학 3에서 (또는 2입니까?) 그런 종류의 것을 배웠지 만 실마리가 없다면 math.stackexchange.com으로 문의 하십시오 . 그리고 얼굴이 바깥에 있다면 아무 것도하지 마십시오. 두 메시의 모든면을 반복하면 교차 메시가 남게됩니다.


2

다각형 모델을 다루는 경우 비 매니 폴드 지오메트리를 처리해야 할 수도 있습니다. 이는 "내부"와 "외부"가 무엇인지에 대한 문제를 의미합니다. 0 또는 1을 가지고 있는지 모르는 경우 부울 연산을 수행하는 것이 까다 롭습니다.

또한 동일 평면 다각형, 모서리와 교차하는 다각형, 모서리 및 / 또는면에있는 정점 및 그 성질의 것들과 같은 프린지 케이스도 처리해야합니다. 어느 것도 불가능하지 않다면, 메시 데이터를 표현할 수있는 매우 강력한 방법과 그러한 경우에 발생할 것으로 예상되는 내용에 대한 엄격한 정의가 필요합니다.


1

대부분의 작업은 부정과 결합으로 표현 될 수 있습니다. 일부 형상의 부정은 법선이 뒤집힌 형상입니다. 따라서 노동 조합을 올바르게 얻을 수 있다면 다른 작업은 다음과 같아야합니다.

  • 교차점 (A, B) : =! union (! A,! B)
  • 빼기 (A와 B) : =! union (! A, B)

Sander는 CSG 구현에 대해 설명하는 상당히 좋은 블로그 게시물을 보유하고 있습니다. http://sandervanrossen.blogspot.com/search/label/CSG


1
나는 내 자신의 CSG 자료를 언급하려고했지만 분명히 다른 누군가가 이미
했었다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.