TL; DR BSP 트리를 사용하여 부울 연산을 구현해야합니다.
음, 여기서 우리는 입체 솔리드 지오메트리 에 대해 이야기하고있는 것 같습니다 . 나는 상업 수준에서 CSG를 구현하여 그것에 대해 한두 가지를 알고 있습니다.
CSG에 대한 고전 논문은 BSP 트리 생성 다면체 세트 연산 병합 이라고 합니다. 솔직히 말해서 여기에 설명하기에는 너무 많지만 간단히 말해서 알고리즘은 이진 공간 분할과 동일한 평면에있는 다각형을 처리하여 기본적으로 구성합니다. 각 다각형 메쉬의 BSP 트리 두 번째 단계는 이러한 BSP 트리를 병합하는 것입니다. 한 나무를 가져다가 다른 나무에 삽입하면됩니다. 그런 다음 알고리즘은 노드를 나누고 빼기 위해 각 리프 노드를 처리하는 방법을 설명하고 최종 모양에 필요하지 않은 노드는 제거되고 다른 노드에는 적절한 부모가 제공됩니다.
하지만 기다려! 그 종이는 기본적으로 다각형 메쉬와 3D 평면에 대해 말하고 있습니다.
알고리즘은 모든 차원으로 일반화 될 수 있으므로 2D 경우 평면 대신 이진 파티션으로 선분을 쉽게 사용할 수 있습니다. 따라서 각 다각형은 병합되는 것보다 BSP 트리로 변환됩니다. 마지막으로 결과 트리를 탐색하여 최종 다각형을 생성합니다.
이 알고리즘과 CSG는 일반적으로 렌더링 및 메쉬면을 직접 처리하지 않으며 실제로 렌더링 준비가되어 있지 않으므로 최종 BSP 트리의면을 추출해야합니다. 또한 광선 추적이 CSG 결과를 렌더링하기위한 더 쉬운 접근 방법이라는 것을 알았 습니다.면 을 추출하고 실제로 분할 하는 대신 광선을 트리를 통과하기 만하면됩니다 (이진 파티션 만 처리 함을 기억하십시오).
수치 적 견고성에 관해. 기하 계산에는 두 가지 유형이 있습니다.
- 구성을 기반으로하는 구성 요소는 이전 작업의 결과를 기반으로 모양 을 구성 합니다. 예를 들어
y = sqrt(x)
다음 사용하는 y
새로운 작동. 이것을 건축이라고합니다. 문제는 수치 오류가 빠르게 누적된다는 것입니다.
- 대신, 술어를 대신 사용 하는 조작이 있습니다 . 기본적으로 구성을 사용하는 대신 조건이 참 / 거짓인지를 묻고 다른 조작에서 동일한 값을 사용하기 만하면됩니다. 고전적인 테스트에는 원형 및 오리엔테이션 테스트가 포함됩니다. 특히 단 정밀도 또는 배정 밀도를 사용하지만 일반적으로 훨씬 더 나은 결과를 얻을 경우 수치 오류가 발생할 수 있습니다. 속도와 정확도가 다른 다른 솔루션도 있습니다. 다음은 평면 기반 형상을 사용하여 정확한 결과를 제공하여 구성을 피하는 최근 논문 중 하나입니다. 나는 또한 논문에서 인용 할 것이다 :
다각형 메시의 평면 기반 표현의 개념은 Sugihara와 Iri [SI89]에 의해 처음 설명되었습니다. 이러한 종류의 표현은 불리언 표현식의 평가와 같이 메시로 표현되는 솔리드의 토폴로지를 변경하는 작업과 관련하여 중요한 이점을 제공합니다. 결과 다면체를 얻기 위해 새로운 기본 지오메트리 정보를 구성 할 필요가 없습니다.
마지막으로 BSP CSG 구현을 시작하려면 BSP Faqs에서 시작하는 것이 좋습니다 .