728x90

법선 벡터( 면에 수직인 벡터 )의 변환의 경우 일반적인 정점의 matrix를 그대로 사용하면 안된다.

법선 벡터 예시

실제로 단순 vertex를 월드 좌표로 옮길때 "world marix"라 부르는 SRT ( 스케일, 회전, 이동 ) 이 적용된,

matrix를 사용하게 되는데, 법선 벡터도 동일하게 world matrix를 사용하면 "직교성"을 잃어버린다.

(실제로 손으로 계산하면 바로 알 수 있다.)

월드 좌표로 변환 예시

그럼 어떤 matrix를 곱해야 월드 좌표로 옮겨도 직교성을 유지할 수 있을까??

W, world matrix

결론부터 얘기하면, world matirx의 역 전치를 곱하면 된다.

예를 들어 삼각형의 위의 벡터 V가 있고, 법선 벡터를 N이라 하자. ( N · V = 0, 직교하므로)

월드 좌표로 변환된 두벡터의 내적은 여전히 0이어야 한다. 따라서,

 

Nt · Vt = (T N) · (W V) = 0 이다.  이때 T를 구하면 된다.

 

(T N) · (W V) = trans(T N) (W V) = trans(N) trans(T) W V = 0 인데, ( trans()는 전치 )

 

trans(N) V = 0이므로, trans(T) W가 단위 행렬이 되면 된다.

 

따라서, trans(T) = inv(W)   =>  T = trans( inv(W) )  

 

 

728x90

+ Recent posts