내용은 GPG3에도 나오고 여기저기 있지만, 글 자체는 빗자루님 홈페이지에 퍼왔다.
한 버텍스(x, y, z)의 주변 버텍스는
코드: v 1(x+1, y, h1) v2(x, y+1, h2) v3(x-1, y, h3) v4(x, y-1, h4) |
로 표현할수 있다.
내적공식
코드: CrossProduct(v1, v2)= ( v1.y*v2.z-v1.z*v2.y, v1.z*v2.x-v1.x*v2.z, v1.x*v2.y-v1.y*v2.x ) |
을 사용해서
이 중심버텍스의 주변의 페이스 노말을 구하면
코드: v1=(x+a, y+b, c) v2=(x+d, y+e, f) CrossProduct(v1, v2) =(v1.y*v2.z-v1.z*v2.y, v1.z*v2.x-v1.x*v2.z, v1.x*v2.y-v1.y*v2.x) =((y+b)*f-c*(y+e), c*(x+d)-(x+a)*f, (x+a)*(y+e)-(y+b)*(x+d)) =(yf+fb-yc-ce, cx+cd-fx-af, xy+xe+ay+ae-xy-dy-bx-bd) =((f-c)y+fb-ce, (c-f)x+cd-af, (e-b)x+(a-d)y+ae-bd) |
을 이용해 정리하면
코드: v1=(x+1, y, h1) a=1, b=0, c=h1 v2=(x, y+1, h2) d=0, e=1, f=h2 n1=CrossProduct(v1, v2)=((h2-h1)y-h1, (h1-h2)x-h2, x+y+1) v2=(x, y+1, h2) a=0, b=1, c=h2 v3=(x-1, y, h3) d=-1, e=0, f=h3 n2=CrossProduct(v2, v3)=((h3-h2)y+h3, (h2-h3)x-h2, -x+y+1) v3=(x-1, y, h3) a=-1, b=0, c=h3 v4=(x, y-1, h4) d=0, e=-1, f=h4 n3=CrossProduct(v3, v4)=((h4-h3)y+h3, (h3-h4)x+h4, -x-y+1) v4=(x, y-1, h4) a=0, b=-1, c=h4 v1=(x+1, y, h1) d=1, e=0, f=h1 n4=CrossProduct(v4, v1)=((h1-h4)y-h1, (h4-h1)x+h4, x-y+1) |
페이스노말벡터들의 합을 구하면
코드:
|
4개의 페이스노말벡터의 합이므로 4로 나누면
코드:
|
가 된다. 이 값을 Normalize해서 사용한다.
Posted by chungki


