2012-07-11 1 views
0

3D 볼록 선체 계산을위한 빠른 선체 알고리즘을 구현하려고합니다. 문제는 포인트가 주어진 표면을 "볼 수 있는지"알아야한다는 것입니다.주어진 3D 표면과 관련된 지점의 위치 결정

표면의 방향이 시계 방향 또는 반 시계 방향입니다.

알고리즘 작업을 그래픽으로 설명하기 위해 작은 OpenGL 프로그램을 작성했습니다.

는 내가 다른 알고리즘 (정규화 상호 제품은 평면에서 점의 거리) 잘못된 단계로 이끌어

그들은 모두 알고리즘에서 촬영되고 사용했다 다양한 방정식을 시도했다. 의미 그들은 특정 표면이 지점에서 볼 수 있다고 결정했습니다 (그래픽으로 볼 수는 없습니다)

표면 또는 "얼굴"의 예입니다.

e1 = 0, 0, 0 to 10, 0, 0 
e2 = 10, 0, 0 to 10, 10, 0 
e3 = 10, 10, 0 to 0, 10, 0 
e4 = 0, 10, 0 to 0, 0, 0 

<---------/\ 
||  || 
||  || 
||  || 
\/---------> 

두 포인트가 있으며 표면의 어느면에 있는지 알고 싶습니다.

P1 = -1, -1, -1 어떤 도움이 많이 이해 될 것이다 1

P2 = 1, 1,.

답변

1

첫 번째 단계는 평면의 법선을 결정하는 것입니다. 이것은 교차 제품으로 달성 할 수 있습니다. 두 벡터가 정상의 같은 방향을 가리키는 경우,

compare = point - e1 

그리고 두 벡터의 내적 설명합니다 : 예를 들면 :

normal = cross(e2 - e1, e3 - e1); 

는 그런 다음에 정상을 비교하는 벡터를 필요

side = dot(normal, compare) 

면이 0보다 큰 경우, 점은 법선이 법선을 향하고있는면에 있습니다. < 0이면 반대쪽에 있습니다. 값이 0이면 정확히 비행기에 있습니다.

중요한 단계는 법선이 올바른 설명을 가리 키도록 정의하는 것입니다. 다각형 만 있으면 모서리 점의 순서로 법선을 정의 할 수 있습니다. 예 : 위쪽은 점이 시계 방향 인 쪽입니다. 다른 것이 필요한 경우 더 많은 정보를 제공해야합니다.

+0

가장자리를 나타내는 점이 있다면 십자가 (e2 - e1, e3 - e1) = 십자가 (p3 - p2 - p2 + p1, p4 - p3 - p2 + p1)입니까? 나는 그것을 시험 할 것이고 그것이 어떻게 작동하는지 알려줄 것이다. – Jonathan

+0

내 문제는 내가 3 점의 연속 점이 아닌 모든 점을 사용하여 정상적인 얼굴을 계산했다는 것입니다. – Jonathan