본문 바로가기

[DirectX]RHW란?

출처 블로그 > 프로그래밍 독학소☆
원본 http://blog.naver.com/ljyhs/30014533560

RHW(Reciprocal Homogeneous W)란?

 

copyrightⓒ 김성완(찐빵귀신) [2001년 7월 23일]

W는 Homogeneous coordinates의 네번째 성분이고 homogeneous coordinates 는 우리말로 동치 좌표라고 합니다. 일반적으로 3차원 좌표변환 행렬로 4*4 행렬을 사용하는데.. 그렇게 되면 버텍스 좌표계 값은 (x,y,z,1)로 사용합니다.

perspective 변환 행렬을 적용하고 나면 버텍스 좌표값의 네번째 성분이 1이 아닌 값이 나오게 되는데.. 이렇게 얻어지는 좌표값을 보통 (x,y,z,w)라고 표시합니다.

이때 이런 좌표값을 동치 좌표라고 합니다. 실제로 스크린상의 좌표값으로 사용하기 위해서는 동치좌표가 아닌 일반적인 좌표로 변환을 해야 하는데.. 좌표의 각성분을 w로 나누어서 구하게 됩니다. 즉, (x/w, y/w, z/w, w/w) = (x/w, y/w, z/w, 1) 이 되고 네째 성분 값이 1인 일반적인 좌표로 바뀌죠.

rhw라고 하는 것은 reciprocal homogeneous w 의 약자로 동치좌표 'w의 역수' 라는 뜻입니다. 즉, 1/w 를 말하죠. 위에서 동치좌표를 일반적인 좌표로 변환하기 위해서 w로 나누었는데, 컴퓨터에서는 나누기 계산이 느리므로 1/w를 한번만 구해서 각성분에다 1/w를 곱하는 식으로 계산을 처리합니다.

그래서 direct3d에서는 w의 역수를 rhw라고 이름하고 따로 저장하는 거죠.

그런데 직접 행렬 변환을 처리할 목적이 아니라면 이런 부분은 굳이 알지 못하더라도 물체의 좌표를 담은 오브젝트 좌표값만 넘겨주면 위에서 언급한 계산들은 세팅해준 행렬에 따라 자동으로 알아서 처리해주므로 신경쓰지 않아도 됩니다. 좌표변환의 전과정을 직접 처리할게 아니라면 rhw는 크게 신경쓰지 않아도 됩니다. 그냥 변환 행렬만 제대로 세팅하면 되지요.