その先にあるもの…

normal에 역행렬 전치행렬하는 이유 본문

프로그래밍/3D

normal에 역행렬 전치행렬하는 이유

specialJ 2014. 3. 25. 15:04




X축으로 1/2로 스케일링을 한다고 했을 때


가운데 그림처럼 normal vector가 변형이 되어진다.


normal vector는 한 면에서 수직인 벡터를 말하는데 그 값이 scale되어 방향서이 달라지게 된다.


정상적으로 Normal을 구할려면


WorldMatrix에 역행렬 - 전치행렬을 하면 된다.


쉐이더등에 행렬을 넣을 때 모든 행렬을 전송하는게 아니기 때문에 world행렬 등만을 전달한다.


world matrix에는 위치, 스케일, 회전의 값이 들어 있다.


위의 그림은 스케일이 적용 되어 있다.


행렬에는 scale과 rotation의 정보가 들어 있는데 scale만을 뽑아 내기 못하기 때문에


행렬에 역행렬을 구해야 한다. 



z축 회전 행렬 




회전 행렬을 만큼 뒤로 돌리면 역행렬이 된다. 




는  0을 기준으로 좌우가 대칭이기 때문에 와 는 같은 값을 가진다.


 값을 가진다.




z축의 행렬을 역행렬로 만들면




위 행렬을 보면 z축 행렬과 전치가 된다.


모든 행렬의 역행렬이 전치 행렬이 되는 것이 아니다.


회전 행렬같은 경우는 역행렬이 전치 행렬이 된다. 



단위 행렬에   에  2만큼 스케일을 하면  



스케일한 행렬의 역행렬 (1/2의 값을 가지는)과 전치행렬은 같지가 않다.


 

scale값만 역행렬을 구하면 되지만 회전 정보가 같이 들어 있다고 했다.





역행렬을 구했다.


스케일 행렬에 역행렬만 구하면 되기 때문에


Scale행렬은 전치행렬을 해도 변화가 없으며 

회전 행렬은 전치행렬을 하면 다시 역행렬이 되어 값의 변화가 없어진다.





http://www.3dstudy.net/cgi-bin/ez2000/ezboard.cgi?db=qna&action=read&dbf=707&page=73&depth=1

http://x66vx.egloos.com/3716315

http://mgun.tistory.com/search/%EC%97%AD%ED%96%89%EB%A0%AC

http://arcsynthesis.org/gltut/illumination/Tut09%20Normal%20Transformation.html


'프로그래밍 > 3D' 카테고리의 다른 글

Frustum 그리기  (0) 2015.03.19
Z Buffer State  (0) 2015.03.04
Dissolve Shader  (0) 2015.02.11
NVidia NearClipPlane  (0) 2014.03.25
동차좌표(homogeneous coordinate)  (0) 2014.02.06
Comments