최상단 광고

2012년 6월 19일 화요일

[원리에 대한 고찰] 동차좌표계(homegeneous Coordinates)


퍼온 자료 : http://www.gpgstudy.com/forum/viewtopic.php?topic=6396 (GPG Study의 Q&A란)

* etds님의 설명 (애니파크)
간단하게 말하면 (x, y, z, w)는 3D상에서 (x/w, y/w, z/w)를 나타내는 것이고,
(3D 프로그래밍을 하는 입장에서 봤을 때) 굳이 w를 넣어서 4차원으로 표현하는 이유는
1. 무한대를 표시할 수 있다. w를 0으로 놓으면 되니까. (w=0이면 point가 아니라 direction이라

고 생각할 수 있다)
2. translation도 행렬의 곱으로 표현할 수 있다.



* 비회원님의 설명
(1,2,3)하고 (2,4,6)하고 다르죠.
근데, 동차좌표계에서는 이걸 같이 할 수 있습니다.
바로 뒤에 w하나를 더 넣는거죠.
(1,2,3,1) = (2,4,6,2)입니다.
프로젝션 매트릭스를 하면 바로 마지막 w에 1이 아닌 값이 나옵니다.
컴은 맨마지막에 이 w로 x,y,z와 자기 자신까지 나눠버립니다.
(2/2,4/2,6/2,2/2)=(1,2,3,1)입니다.
그래서 같은거죠.

이것보다는 왜 이걸 쓰느냐 하는 문제입니다. 그게 더 중요하죠.
프로젝션해보셨으니, 그 이론 중 z로 나눠야 한다는 대목이 있을겁니다.
근데 이걸 매트릭스에 넣으려고 하니까 안되는겁니다.
왜? 제일 쉬운 삼각형 하나만 예로 들어보죠.
삼각형 좌표가 (1,1,1) (10,10,10) (100,100,100)이라고 해봅시다.
이게 프로젝션을 통과하면 정삼각형이 나옵니다. 즉 (1,1,1) (1,1,1) (1,1,1)이 되어야 하거든요.
이걸 매트릭스에 표현해봅시다. 첫번째 점은 통과입니다. (10,10,10)은 나누기 10 하면 되겠군요.
근데 세번째 점은 (100,100,100)은 나누기 100해야됩니다.
스케일을 해야 저 점이 (1,1,1)이 되는데 점마다 나눠야 할 크기가 다릅니다.

그래서 수학자들이 생각햇습니다. 나누는 점이 그때그때 다르면 어떻게 할까?
해결책이 동차좌표입니다. projection._34 = 1.0f로 되어있죠. 한 번 보세요.
그리고 그 projection매트릭스에 (x,y,z,1)를 곱해보세요. 딴 건 몰라도 (?,?,?,z)이렇게 됨을 알

수 있습니다.

그러면 컴은 나중에 이 w를 무조건 1로 만들어야 하니, 저장되어있는 각각 다른 w(=z)로 나누게

되는겁니다. 

댓글 없음: