2012-05-27 2 views
1

복셀에서 평평한 표면을 그리려는 중입니다. 목표는 채우는 것이고 많은 문제가 있습니다. 내가 시도한 모든 것은 표면에 구멍을 만듭니다. 곡면에는 4 개의 모서리가 있지만 삼각형에도 같은 방법을 사용할 수 있기를 바랍니다. 여기 3D 복셀 각진 평면

는 I 해봤 무엇 :

  • 평면의 측면을 따라 (Z 방향)의 한 방향으로 만 그리 다른
  • 하나의 병렬 측으로부터 따라 그려

나는 2로 가장 성공했으나 비행기에 피치 나 롤을 추가하면 실패합니다 (모든 고도가 있음).

팁이 있습니까? 내 구현이 모두 정확하다고 확신하기 때문에 코드가 없습니다. 알고리즘의 선택이 잘못되었습니다.

편집 : 보조 노트에

, 2 번 적은 구멍을 가지고 있지만, 비행기가 왜곡 된 평면 표시하지 않았다.

EDIT2 : 구멍이있을 때 내가 처음으로 의사 결정을 고수하고있어,하지만 지금은 문제는

, 어떻게 감지 하는가? 관측에 의하면 피치와 롤에 관계없이 평면 당 같은 양의 구멍이 있음을 알았습니다. Yaw가 범인입니다.

EDIT3 : I가이 질문을 떠날거야하지만 난 그냥 비어 있는지 확인하기 위해 근처의 블록을 테스트하기로 결정

. 나는 그것을하고 싶지 않았지만 그래. 당신이 더 우아한 해결책을 가지고 있다면 나는 모든 귀입니다.

답변

1

무한대의 평면에는 모서리가 없습니다. 네면 다각형에 대해 이야기하고 있습니까? 사각형 코너가 있습니까?

다각형의 경우 삼각형으로 다른 다각형을 만들 수 있으므로 삼각형으로 시작할 것입니다.

그러면 삼각형을 채우는 데 좋은 시작은 주어진 복셀을 채워야하는지 여부를 정확하게 테스트하는 것입니다. Here은 두 가지 다른 point-in-triangle 테스트의 한 예입니다.

다른 방법으로 진행할 수 있습니다. 예를 들어, 가장 효율적인 것은 아니지만 중심에서부터 영역을 확장하고 인접한 각 복셀을 테스트하고 스택으로 반복 할 수 있습니다.

+0

감사합니다. 나는 (매우) 비효율적 인 알고리즘을 기사의 기사를 기반으로 작동시켰다. 주요 최적화 작업이 필요하지만, 작동합니다. 삼각형 주위의 큐브를 반복하고, 그 페이지에서 같은 방법을 사용하지만, 평면 (X, Y 또는 Z)에 각각 투영 된 세 개의 2D 삼각형에 대해 테스트합니다. 그 점이 삼각형 "피라미드"영역에 있는지를 결정합니다. 그러면 평면 방정식이 사용되며 점은 알려진 점에서 빼고 삼각형의 법선으로 점을 찍습니다. 도트 생성물 값은 주어진 불확도 매개 변수에 대해 테스트된다. dot> = -u && dot <= u. – SpaceFace

관련 문제