2013-04-09 2 views
0

블렌더 (머리 스타일)에서 일부 머리카락을 추출했습니다. 이들은 여러 행 (GL_LINES)으로 구성됩니다. 내 OpenGL 프로그램은 아무런 문제없이 이러한 입자를 표시합니다. 이제 저는이 미립자에 가벼운 속성을 적용하기를 원합니다. 블렌더는 법선 벡터를 내 보내지 않으므로 직접 계산해야합니다. 나는 다음의 규칙을 안다 :3D에서 세그먼트 선의 법선을 계산하는 방법

우리가 dx = xB - xA와 dy = yB - yA를 가지고있는 을 2 차원에서 [AB]로 정의하면 법선은 N1 (-dy, dx) 및 N2 (dy, -dx)이다.

나는 실수하지 않았 으면 좋겠다.

하지만 선분 좌표 (예 : A (5, 2, 3) 및 B (0, 0, -5)에 z 치수를 추가하면 3D 공간 선분 정의에 대한 규칙을 알 수 없습니다.)).

나를 도와 줄 사람이 있습니까? 보통이없는 3D 공간에서

라인 : 아키 댓글이 답변 아니라는 것을 잊었 때문에

+7

3D의 선에 대한 단일 법선이 없습니다. 대신 선 자체는 평면의 법선입니다. –

+1

Aki Suihkonen이 말한 것. 또는, 반대 방향으로 말하면 : 선에 수직 인 평면에 놓여있는 무한 수의 법선이 있습니다. 단일 법선을 계산하려면 삼각형과 같은 "평면"이 필요합니다. 반면에 선은 차이점을 볼 수 없으면 모든 가능한 방법으로 스스로 회전 할 수 있습니다. – Damon

답변

1

. 기술적으로, 2D 공란에있는 행에는 일반 공백이 없습니다. 그들은 두 개의 법선을가집니다.

3D 공간에서 선에 수직 인 방향이 무한합니다. 이 모든 법선은 동일한 평면에 있지만 방향이 다릅니다. 일부 고급 알고리즘 (인접 선을 기반으로 할 가능성이 있음)이 없으면 이러한 법선 중 하나를 다른 것보다 더 선택할 수있는 방법이 없습니다.

+0

답변 해 주셔서 감사합니다. 그러나 OpenGL의 라인은 아시다시피 실제 라인이 아닙니다. 그것은 작은 표면을 가지고 있습니다. 증명은 glLineWith() 메소드입니다. 나는 너비가 10 픽셀 인 선을 줌하면 선이 작은 다각형이라는 것을 알 수있다. 그래서 너비가 1 (기본값) 인 선은 작은 다각형입니다. 따라서 솔루션은 각 선 (A (x, y, z) 및 B (x, y, z))의 점 좌표를 보존하고 선을 병합 한 다각형을 작성합니다 (법선 연산 만). 따라서이 라인의 법선을 계산할 수 있습니까? – user1364743

+3

@ user1364743 : OpenGL 선은 표면이 없습니다. glLineWidth는 화면의 선 너비를 설정합니다. OpenGL 라인은 작은 실린더 또는 폴리곤이 아니며 "폭파"할 수 있습니다. 나는 OpenGL에 대해 매우 강한 오해가 몇 가지 있습니다. OpenGL은 장면이 무엇인지 알지 못합니다. 기하학이 무엇인지조차 알지 못합니다. 2D 평면 프레임 버퍼에 2D 평면 모양으로 그려지는 점, 선 및 삼각형이 모두 보입니다. 3D의 모든 유사성은 3D처럼 보이는 이미지를 만드는 영리한 응용 프로그램으로 발생하지만 실제로는 아닙니다. – datenwolf

+0

@ user1364743 : 선폭 관련 : OpenGL은 Bresenham 선 래스터 라이저와 매우 유사한 선 래스터 라이저를 사용합니다. Google이 "Bresenham 라인을 생각해보십시오"라고 말하면 OpenGL과 같습니다. – datenwolf

1

두 개의 벡터를 시작할 수 있다고 가정 할 때, 그 벡터를 v, w라고하면 교차 벡터를 취할 수 있습니다. 상황에 따라 v, w를 정상화하는 것은 나쁜 생각이 아닙니다. 교차 곱은 다음과 같이 주어질 수 있습니다 :

v x w =(v_2w_3 - v_3w_2, v_3x_1 - v_1w_3, v_1w_2 - v_3w_1), 

여기서 v_i는 v의 i 번째 구성 요소입니다. 서로 옆에있는 숫자는 곱셈을 나타냅니다. 당신은 물론 두 가지 가능성을주는이 벡터를 더하기 또는 빼기 가지고 있습니다.

+0

btw, 시작하는 두 개의 벡터를 얻으려면 설명 된 다각형에서 두 개의 비평 행 세그먼트를 사용하십시오. –

+0

답변 해 주셔서 감사합니다. 나는 이것을 시도 할 것이다. 나는 또 다른 명제가있다. 가능할 지 말해봐. 제가 선분 [AB]을 가지고 있다고 가정하십시오. 나는 선에 수직 인 두 말단 (법선 계산에만 해당)에서 두 개의 다각형을 계산합니다. 따라서 폴리곤을 72도만큼 분리하여 5 개의 법선을 계산할 수 있습니다 (예를 들어). 그래서 라인 세그먼트에 광도를 계산하기 위해 10 개의 법선을 다각형과 병합했습니다. 이것은 3D에서 광도 효과를 증가시킬 것이라고 나는 생각한다. 가능하다고 생각하십니까? – user1364743

+0

나는 당신의 발광 효과에 대해 모른다. 그러나 당신이 가지고있는 다각형들이 당신이 속한 3 차원 공간에서 비평 행할 때만 다른 (평행하지 않은) 법선을 얻을 것이다. 나는 그림 그리기를 제안 할 것이다. . –

관련 문제