2014-09-24 10 views
2

nonconvex 다면체 오브젝트에 부울 연산을 구현하고 OpenGL로 렌더링하려고합니다. 나는 경계 표현 (BReps)과 구성 솔리드 기하학 (Constructive Solid Geometry, CSG) : 다면체에 대해 부울 연산을 수행하는 두 가지 주요 기술에 대해 읽었습니다. 일부 논문에 따르면 CSG로 불리언을 구현하는 것이 쉽지 않아서 브리핑보다는 CSG를 ​​사용하는 것이 좋습니다. BReps는 꼭지점과 다각형으로 지오메트리를 설명하는 반면 CSG는 나무 구조 내에서 결합되는 실린더 나 구와 같은 기본 기본 객체를 사용합니다. BReps에서 불리언 값을 수행하는 것은 교차하는 폴리곤을 절단하고 필요하지 않은 폴리곤을 제거하여 구현된다는 것을 알고 있습니다 (operatins가 union인지 difference인지에 따라 다름). 그러나 부울 연산은 CSG의 관점에서 어떻게 구현됩니까? 어떻게하면 CSG 부울 연산을 구현할 수 있습니까? 나는 인터넷에서 이미 이것을 보았습니다. 예를 들어 http://evanw.github.io/csg.js/ 또는 https://www.andrew.cmu.edu/user/jackiey/resources/CSG/CSG_report.pdf 이 알고리즘은 브리핑에 BReps를 사용한다는 것이 흥미로운 점입니다. 그래서 저는 CSG의 장점이 무엇인지, 왜 CSG 불법 복제가 더 쉽게 구현되어야하는지 이해하지 못합니다.Constructive Solid Geometry 대 경계 표현

답변

1

당신은 어떻게 든 이야기하고 사과를 할 수 있다는 것입니다 배.

CSG는 복잡한 솔리드를 기본 솔리드로 묘사하는 일반적인 방법으로 솔리드의 "산술"을 원할 경우 사용할 수 있습니다. 이 과정은 이들 고형물의 정확한 표현과 무관합니다. 대안/보완 모델링 기술의 예는 자유 곡면 생성, 일반화 된 실린더, 대수적 방법입니다 ...

BRep은 정점/모서리 /면 그래프 구조를 기반으로 한 솔리드의 가능한 표현입니다. 일부 대체 표현은 voxels 및 octree와 같은 공간 점유 모델입니다.

일반적으로 CSG 표현식은 현재 표현을 사용하여 평가됩니다. 어떤 경우에는, 원래의 CSG 트리는 리프에 기본 프리미티브가 그대로 유지됩니다.

다면체 BRep 모델은 구현하기가 개념적으로 간단합니다. 어쨌든 CSG 표현식 평가는 어렵습니다 (다면체 교차로는 불안정한 숫자 및 위상 문제를 발생시킵니다).

BRep의 렌더링에는 얼굴의 삼각 측량이 필요하며 표준 렌더링 파이프 라인으로 처리 할 수 ​​있습니다.

보셀 모델은 구현이 간단하고 CSG 표현식을 처리하기도 쉽지 않습니다. 반면에 그것은 모양의 근사한 근사를 제공합니다.

원시 CSG 트리는 광선 추적 기술에 의한 직접 렌더링에 사용할 수 있습니다. 모든 기본 요소를 광선으로 통과 한 후 CSG 표현식을 사용하여 광선 섹션을 결합합니다. 이 접근법은 높은 계산 비용 (이미지의 모든 픽셀과 모든 뷰에 대해 모든 것을 반복해야 함) 대신에 비교적 간단한 구현과 정확성을 결합합니다.

1

CSG 모델은 변형 된 제품에 적용 할 작업 (결합, 교차 등 ...)을 나타냅니다. 큐브의 모서리를 다듬는 것과 같이 기본 요소를 실제로 수정하지는 않습니다. 렌더링 엔진이 트릭을하고 있기 때문에 복잡한 모델이 화면에 표시되는 것을 볼 수 있습니다. CSG 모델을 표시 할 때는 일반적으로 두 가지 방법이 있습니다. 첫 번째 방법은이를 즉시 Brep 모델로 변환하고 두 번째 방법은 종종 스캔 라인 알고리즘을 기반으로하는 CSG 직접 표시 알고리즘을 사용하는 것입니다.

이미 CSG 렌더링 엔진이 좋으면 Brep 모델을 트리밍하는 것에 대해 걱정할 필요가 없으며 실제로 수명이 더 쉽습니다. 그러나 렌더링 엔진을 직접 작성해야한다면 CSG로 이동하여 시간을 절약 할 수 있습니다. 내 의견 CSG에

0

모든

  • 에 있지 용이하지만
  • 가 사용되지 않는 원통, 구, ...
  • 대신가 사용되는 회전 표면 곡선
  • 더 정확 CSG에

운영

  • 같은 축을 가진 회전 표면에서 작업을 수행하면 (bool)
  • 다음은 축에 대한 연산을 수행하는 것입니다 (CSG가 BRep보다 좋음)
  • 동일 그러면 CSG 트리에 새 항목을 작성해야합니다.
  • 또한 호환 오브젝트 (상자가 동일한 결합/교차 표면으로 결합/잘라내기를 의미 함)에 대한 작업은 간단히 크기를 업데이트하여 수행 할 수 있습니다.
  • 대부분의 구현은 그런 일을하지 않고 대신 모든 작업을 트리에 저장합니다.
  • 트리의 변경 후 렌더링 속도가 느려집니다.
  • 또한 렌더링은 자체 작업이 아니라 렌더링이나 사전 렌더링 단계에서 모든 작업을 수행해야합니다.
  • 그러면 CSG 구현이 더욱 복잡해집니다.
  • 나는 그것에서 볼 수있는 유일한 장점은 모델 분석 표현 훨씬 더 여러 작업이 그 위에있는 특히 정확
  • ...