문제

모델 편집기를 작성하는 동안 Raytracing을 활성화하는 것 외에는 광선과 삼각형 Bezier 패치 사이의 교차점에 대한 매우 좋은 근사치를 찾고 싶은 몇 가지 작업에 대해 생각할 수 있습니다.

이 작업을 수행하는 방법? 나는 몇 가지 방법을 알고 있지만 더 나은 방법이있을 것입니다.

정확한 사용 사례 : 마우스와 함께 세부 모양을 그리기위한 기준 표면으로 하나의 Bezier Triangle 패치를 사용하고 싶을 수도 있습니다. 나도 그러한 패치에서 분할 점을 정확히 찾아 내고 싶을 수도 있습니다.

C 소스 코드가 있으면이를보고 싶습니다. 아마도 내 자신의 코드를 굴리는 대신 사용하십시오.

도움이 되었습니까?

해결책

나는 당신이 구현할 것을 제안합니다 삼각형 베 지어 클리핑 (PDF).

그러나 또 다른 가능성은 삼각형 패치를 텐서 제품 베 지어 패치로 변환하는 것입니다. 이를 수행하는 장점은 텐서 제품 베 지어에 대한 지원이 훨씬 더 많아서 사용할 수있는 코드를 찾을 가능성이 높다는 것입니다. 변환은 간단합니다.

  • 삼각형 패치를 일련의 N+1 행의 제어점으로 간주하십시오 (여기서 N은 학위).
    • 첫 번째 행에는 1 개의 제어점이 있으며 각 행에는 마지막 것보다 1 개의 제어점이 더 있습니다.
  • 이제 각 행을 적절한 정도의 베 지어 곡선으로 취급하십시오 (Decce 0 ~ N)
  • 학위 각 행을 정도로 높이십시오
    • 각 행에는 N+1 제어점이있어 N+1의 N+1의 제어점 그리드를 형성합니다.
  • N Bezier Patch에 의해 어느 정도 N으로 취한이 포인트 그리드는 삼각형과 동일한 표면입니다.

교차점의 점을 찾으려면 이것이 잘 작동합니다. 그러나 Tensor-Product 패치는 퇴보 (한쪽 끝에는 일치하는 점이 있음)이므로 퇴화 코너에 접근 할 때 숫자 문제가 발생할 수 있습니다. 또한 삼각형 도메인에 다시 매핑하면 텍스처 매핑과 같은 것이 약간 까다로워 질 수 있습니다. 그래서 약간의 구현을 신경 쓰지 않으면 더 직접적인 삼각형 베 지어 클리핑을 사용하는 것이 좋습니다.

다른 팁

나는 삼각형 Bezier 패치에 익숙하지 않지만 항상 삼각형 안에 포함될 수 있다면 광선이 삼각형을 교차하면 내부의 곡선을 교차시켜야합니다.

위의 것이 참이면, 반면이 광선에 충분히 가까운 지점을 위해 레이와 교차하는 두 정점 사이의 곡선을 검색 할 수 있습니다. 이 영역의 곡선 매개 변수에서 이진 검색을 수행하여 그 지점을 얻을 수 있다고 생각합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top