2012-06-26 2 views
0
float pts[N][4]={{x1,y1,z1,v1},{x2,y2,z2,v2},...,{xN,yN,zN,vN}}; 
//in viewsight(0,0)-(w,h); 
//N==w*h 
//if pts[n][3]==0 then pts[n] is invalid 

각 유효 pts의 법선 벡터를 계산하는 방법은 무엇입니까?유효한 각 Pts에 대한 법선 벡터를 얻는 방법?

pts는 포인트 클라우드 데이터의 포인트이며 (w, h) 크기의 전망보기에서 볼 수 있습니다. 이 같은

뭔가 :

p11,p12,p13...p1w, 
p21,p22,p23...p2w, 
... 
... 
ph1,ph2,ph3...phw, 

각각의 포인트는 이웃에 의해 assosiated, 우리에게 함께 표면을 생성한다.

pts는 하나씩 행과 열로 단단히 배열됩니다. 그리고 우리의 임무는 우리의 시각을 향한 각 포인트의 법선 벡터를 가능한 한 정확하게 평가하는 방법을 찾는 것입니다.

실시간으로 생성하려고하는 PTS에 대해 실제로이 작업을 수행하려고합니다. 예를 들어 한 번에 1024x1024 Pts를 계산합니다. 누군가가 전에 발표 한 결의안이 있습니까?

+0

pts는 무엇을 의미합니까? –

+0

무엇을 정상적으로합니까? – nhahtdh

+0

pts는 포인트 클라우드 데이터의 포인트이며 (w, h) 크기의 전망보기에서 볼 수 있습니다. – user1468756

답변

1

일반적으로 표면의 정점에 대한 법선은 인접한 다각형의 법선 벡터의 평균으로 계산됩니다. 참조 : http://www.opengl-redbook.com/appendices/AppH.pdf

를이 경우, 버텍스 P55에 대해 다음과 이웃 :

p44 p45 p46 
p54 p55 p56 
p64 p65 p66 

당신이 삼각형의 각의 법선을 찾을 수

n1 = (p55 - p44) x (p55 - p45) 
n2 = (p55 - p45) x (p55 - p46) 
... 

이 방향을 유지해야하고 모든 법선이 동일한 방향 (뷰어를 향함)을 가리 키도록 벡터의 수를 계산합니다. 거기에서 모든 벡터를 정규화 한 다음 평균을 취해야합니다.

+0

감사합니다. 평균은 다음과 같습니다. (n1 + n2 + ... + nN)/N? 포인트 p55에? 그건 그렇고, PTS가 수천 있다면, 어떻게 속도를 올릴까요? – user1468756

+0

질문을 이해하는 방법은 8 개의 인접 삼각형에 대한 법선의 평균을 취하는 것입니다. 이것은 틀린가? – beaker

+0

일부 포인트가 유효하지 않습니다 (보기에서 볼 수 없음).예를 들어, p44 p66, p56은 유효하지 않으며 p45 만 있습니다. p46 p54 p64 p65 p55 주위에 – user1468756

0

점에 대한 법선 벡터를 계산할 수 없습니다. 점은 법선 벡터를 가질 수 없습니다. 비행기는 할 수 있습니다.

+0

이것은 포인트가 아니고 포인트 클라우드 데이터의 포인트이며 (w, h) 크기의 전망보기에서 볼 수 있습니다. 나는 그들을 평가하는 방법에 대해 토론하는 몇몇 기사를 발견했지만 이해하기가 어렵다. – user1468756

+0

그냥 표면처럼 취급하십시오 – user1468756

+0

표면처럼 취급하려면 적어도 3 점이 필요합니다. –

관련 문제