ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [펌] 3D 기본 용어 설명 2
    프로그래밍/3D 2005. 8. 6. 18:13

     * 행렬 (Matrix) 

    공간상에 몇 개의 점들이 있다고 합시다.. 우리는 그 삼차원상의 점(x, y, z)를 가지고 이거

    저거 하지만 실제로 모니터 화면에는 (x, y)형태로 나타내야 합니다..(모니터 화면은 공간이

    아니라 평면이므로..)

    그럼 어떤 과정을 거쳐서 삼차원의 점이 이차원으로 변형될까요..

    사용자 삽입 이미지

    ( 위 그림은 DirectX Documentation에서 짤라온 그림입니다..)

    위 그림에서 보듯이 렌더링 되어야 할 점들 (Vertices) 들은 우선 World행렬 이라는 것과

    곱해집니다.. 그리고서 다시 View행렬과 곱해지고..마지막으로 Projection행렬과 곱해집

    니다.. 그 다음의 Clipping 과 Viewport Scailing 은..

    안보이는 거 짤르고 또 얻어진 2차원 좌표를 현재 화면에 맞게 재조정하고..뭐 대충 그런

    겁니다..^^;아무튼..여기선 저 곱해지는 3개의 행렬에 대해서 설명하겠습니다..

    먼저 World Matrix..(세계 행렬..??)

    World Matrix는 공간상의 기준 역할을 합니다.. 보통 (1,2)라고 하면 종이에 십자가를 쫙쫙

    그려놓고그 가운데를 (0,0)이라고 한 후에, 오른쪽으로 한 칸, 위쪽으로 두 칸 간 점이라고

    나타냅니다..마찬가지로 공간상의 점 (x,y,z) 도 어떤 점을 기준으로 X축으로 x, Y축으로 y,

    Z축으로 z만큼이동한 점을 말하죠.. 그런데 그 기준점은 어떻게 설정을 해야할까요.. 그걸

    해주는게 바로 이 World Matrix입니다.. (World Matrix는..World Matrix뿐만이 아니라 View

    Matrix, Projection Matirx 모두 4X4행렬로나타냅니다.. )

    1 0 0 0

    0 1 0 0

    0 0 1 0

    0 0 0 1

    위와 같은 World Matrix 가 있다고 합시다.. 단위행렬이죠.. 이럴 경우에 World Matrix는 기

    준점, 즉 (0,0,0)을모니터의 화면 가운데로 잡습니다.. (물론 다른 두 행렬들에 따라 틀려질

    수도 있지만..)그러니까 World Matrix를 변경하면 기준점이 틀려지므로, 모든 객체들의 좌

    표도 마찬가지로 변하게 됩니다..

    다음은 View Matrix..World Matrix의 기준에 의해 객체들이 공간상에 자리를 잡았다고 합

    시다..그런데 우리는 모니터 화면으로 그것들을 볼텐데.. 그럼 어디에서 보는가 하는 시점이

    있어야겠죠..하늘 꼭대기서 객체들을 본다던가, 아니면 한 객체의 시점(1인칭 시점)에서

    다른 객체들을 본다던가..이런걸 카메라 시점이라고 하는데.. 그 카메라 시점을 설정하는게

    바로 이 View Matrix입니다..

    우리가 카메라를 들고 그 렌즈에 비친 화면을 본다고 합시다.. 카메라를 들고 움직이면 물론

    화면도 움직이고,카메라를 들고 회전하면 화면도 회전하겠죠..

    마찬가지로 View Matrix를 이동시키면 모니터상의 화면도 움직이고, View Matrix를 회전시

    키면 화면도 회전을하게 되는 겁니다.. World Matrix와 View Matrix를 비교해서 설명하자면,

    World Matrix를 이동하거나 회전하면 나는 가만히 있고 모든 객체들이 이동하고 회전하지만,

    View Matrix를 이동하거나 회전하면객체들은 가만히 있고 내가 움직이는 것이다.. 라고 생

    각하시면 됩니다..

    마지막으로 Projection Matrix.. Projection Matrix의 역할은 멀리있는 물체가 작게 보이도록

    하고, 뷰포트에맞게 x, y, z를 스케일링해줍니다.. 이 Projection Matrix는 보통 Front

    Clipping Plane의 거리와 Back ClippingPlane의 거리, 그리고 FOV를 이용해서 구할 수 있

    습니다.. Front Clipping Plane와 Back Clipping Plane은 아래 그림을 보시면 뭔지 아실 수

    있을 겁니다..

    사용자 삽입 이미지

    ( 위 그림은 DirectX Documentation에서 짤라온 그림입니다..)

    사용자 삽입 이미지

    그리고 FOV는 시야의 사잇각을 말합니다.. 위의 그림에 어떤 사람이 위쪽을 쳐다보고 있

    습니다.. 푸른색 부채꼴 모양이 시야라고 합시다.. FOV는 바로 그 부채꼴의 중심각인 셈

    이죠.. 그리고 빨간 원은 보이는 물체고,회색 원은 보이지 않는 물체입니다.. 이상..각 행렬

    들이 뭔 일을 하는지 아시겠죠..

     

     * 텍스쳐 (Texture)

    텍스쳐는 3D플밍에서 객체에 좀 더 사실감을 부여하기 위해 객체의 표면에 덧입히는 이미

    지를 말합니다..

    사용자 삽입 이미지    사용자 삽입 이미지

    위의 두 그림을 보면, 왼쪽의 파랗게 된 부분은 텍스쳐가 입혀지지 않은 상태입니다.. 오른쪽

    그림의 벽 부분과 비교했을 때 물론 오른쪽의 것이 돌로 된 벽이라는 것을 사실적으로 느낄

    수 있죠.. 이렇듯 텍스쳐는 물체의 질감을 표현한다든가 애니메이션을 보여준다든가 하는 등

    여러 가지 방법으로 쓰일 수 있습니다..

    일단 여기선 텍스쳐 좌표에 대해서 설명하겠습니다..

    일반적으로 버텍스는 그 점의 공간상 위치를 나타내는 x, y, z 좌표외에 u, v 라는 텍스쳐

    좌표를 따로 가지고 있습니다.. 이 좌표에 따라 텍스쳐를 옆으로 씌운 것처럼 보이기도 하고,

    또는 거꾸로 씌운 것처럼보이기도 합니다.. 그럼, 그 텍스쳐로 쓰일 이미지와 텍스쳐 좌표

    사이에는 어떤 관계가 있을까요..

    사용자 삽입 이미지

    위에 나온 것처럼..벽돌 모양의 이미지가 있다고 합시다.. 그 이미지의 가장 왼쪽 윗부분이

    텍스쳐 좌표로(0,0)이 됩니다.. 오른쪽 윗부분은 (1,0), 그리고 오른쪽 아랫부분이 (1,1)이

    되구요.. 즉, 텍스쳐 이미지 하나를놓고 봤을 때, 텍스쳐 좌표는 0과 1사이로 나타내어지는

    겁니다.. 그런데 위에서 처럼 하니까 벽돌 하나하나가 좀 크게 나온 것 같죠..?? 벽돌을 좀더

    오밀조밀하게 나타내고 싶으면.. 한 쪽 끝에 1 대신 7이나 8 등 훨씬 큰 숫자를 텍스쳐 좌

    표로 넣으면 됩니다..

    사용자 삽입 이미지

    만약 한쪽은 0, 다른 쪽은 2라고 놓으면 위의 그림과 같이 나타나게 되는 거죠.. 즉, 그 좌

    표만큼 똑같은 이미지가중복돼서 나타나는 겁니다.

    댓글