ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 3차원 변환에 대한 개념
    프로그래밍/3D 2005. 7. 22. 21:22

    자료 출처 :http://cafe.naver.com/jzsdn.cafe

    아무래도 3D를 시작하는 프로그래머에게 가장 이해가 잘 가지 않는 부분이 변환에 대한 것이 아닐까 한다. 무슨 변환을 그리 많이 하는지...

    왜 이런 변환을 많이 하는지 어떤 변환을 해야 하는 지 차근차근 정리를 해볼까 한다. 나조차도 자꾸 몇개월 지나면 다시 까먹고 해서 정리를 해놔야 될 필요성에 적어 본다.

    어떤 물체를 하나 3D 공간상에 띄우는 건 사실 그리 어렵지 않을 것이다. 다이렉트3D SDK에 보더라도 많은 샘플이 있으니 말이다.

    자. 이렇게 별다르게 한것 없이 3D 공간에 어떤 A물체가 띄워 있다면 그건 이 A는 로컬좌표계에 있는 것이다. 즉, 그 A가 중심이 되는 공간에 있다는 것이다. 이때 또 다른 B물체를 띄워 보자. 그러면 월드라는 것이 필요하게 된다. 물체가 A 하나 뿐일때는 월드가 필요없었지만 물체가 둘이상이 되면 A, B를 공통적으로 정의해서 위치해야 할 공간이 필요하기 때문이다. 이 것을 월드라고 생각하자.

    그러면 이제 A는 월드에서 a좌표에 있고 B는 월드에서 b좌표에 있다고 기술하면 된다. 사실 A라는 물체가 정점(버텍스)하나라면 월드니 로컬이나 논의할 필요없이 월드 좌표하나만 써도 되는데 이놈이 물체인 것이 문제이다. 삼각형만 봐도 정점이 세개 필요한데 이들의 좌표를 자신들의 중심에 의한 좌표(로컬좌표)가 아닌 월드좌표로 처음부터 정의하면 나중에 회전이나 확대등을 할때(생각해 봐라. 로컬좌표가 없으면 어떻게 회전시킬까?) 상당히 불편하기 때문에 로컬좌표니 월드 좌표니 하는 것이다.

    그래서 이제 로컬 좌표계에 있는 물체를 월드 좌표계로 변환을 해야 하는데 이때 행렬을 사용한다. 이 행렬을 변환 행렬(Transform Matrix : TM)이라고 한다. 이러한 TM은 모든 물체마다 고유하게 하나씩 존재하게 된다.

    그럼 이제 월드에 배치시킨 물체들을 보려면 카메라를 설치해야 한다. 카메라 또한 항상 고정된 위치에서 고정 방향만 본다면 특별한 변환을 할 필요가 없는데, 그렇지 않기 때문에 월드를 카메라가 놓인 위치(카메라 좌표)에서 보도록 변환을 해주어야 한다. 이것이 카메라 변환이다.

    자 이제 3D 카메라로 보이는 것을 2D 모니터로 보여주는 일만 남았다. 이것이 바로 투영 변환(Projection Transform)이다. 3차원을 2차원 좌표계로 변환하는 것이다.

    정리를 해보면 렌더링 파이프라인은 다음과 같다.

    로컬 좌표 -> 월드 좌표 -> 뷰 좌표 (카메라 좌표) -> 투영 -> 화면 좌표

    댓글