728x90
법선 벡터( 면에 수직인 벡터 )의 변환의 경우 일반적인 정점의 matrix를 그대로 사용하면 안된다.
실제로 단순 vertex를 월드 좌표로 옮길때 "world marix"라 부르는 SRT ( 스케일, 회전, 이동 ) 이 적용된,
matrix를 사용하게 되는데, 법선 벡터도 동일하게 world matrix를 사용하면 "직교성"을 잃어버린다.
(실제로 손으로 계산하면 바로 알 수 있다.)
그럼 어떤 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
'수학' 카테고리의 다른 글
임의의 축 회전 (Axis Angle Rotation) (0) | 2016.09.30 |
---|---|
선형 보간(lerp)과 구면 선형 보간(slerp) (0) | 2016.06.11 |
로지스틱 함수 (0) | 2016.03.17 |
Perspective Projection Matrix(원근 투영 행렬)의 유도 (0) | 2016.01.31 |
오일러 공식(Euler fomula) (0) | 2016.01.05 |