ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • XNA 카메라 설정
    Programing/XNA 2009. 4. 2. 02:05
     
    XNA에서는 다이렉트와 비슷하게 카메라 설정을 하는데 Matrix구조체는 상당히 많은 함수들을 내장하고 있고 이것들을 사용하게 되면 쉽게 카메라 설정이 가능하게 된다.

    1. 투영

     - Matrix.CreatePerspectiveFieldOfView() 메서드를 사용한다.


    Matrix.CreatePerspectiveFieldOfView
    (시야각도, 종횡비,근거리클리핑, 원거리클리핑, 투영행렬이저장될 변수)

    첫 번째 매개변수 시야각은 보통 45도를 많이 사용하게 되는데 MathHelper 클래스를 사용하여 많이 표현한다. (MathHelper.PiOver4 = 45도)
    두번째 매개변수는 종횡비이다. 이 값을 위해 아래와 같이 그래픽 디바이스를 이용한 값을 저장해 두면 편리하다.

    // 종횡비
    float aspectRatio = (float)graphics.GraphicsDevice.Viewport.Width /
     (float)graphics.GraphicsDevice.Viewport.Height;
     
    3번째와 4번째는 각각 근거리와 원거리 클리핑 거리이다. 화면에 그릴 부분을 한정으로 설정한다.
    마지막으로 이렇게 설정된 투영행렬이 저장될 Matrix 변수이다.
    만약 다음과 같이 투영행렬이 저장될 변수를 설정해두었다면...
    private Matrix projection;

    최종적으로 다음과 같은 문구가 나오지~~

    Matrix.CreatePerspectiveFieldOfView
    (MathHelper.PiOver4, aspectRatio,0.0001f, 1000.0f, out projection);

    - 45도의 시야각에 위에서 설정한 종횡비사용, 0.0001 ~ 1000 사이에 있는 물체표현, 이값을 projection에 저장!!!! 이렇게..끝!!



    2.  뷰

    일단 뷰 행렬이 저장될 변수를 선언하고...

    private Matrix view;

    이제는 Matrix.CreateLookAt() 메서드를 사용한다.

     Matrix.CreateLookAt
    (카메라위치, 카메라가 바로보는 방향, 카메라의 머리방향(업벡터), 뷰행렬이 저장될 변수)

    위와 같으 4개의 매개변수를 사용하는데 카메라의 위치 및 방향, 벡터등을 아래와 같이 선언하여 사용하는데 좋다.

     private Vector3 cameraPosition = new Vector3(0.0f, 0.0f, 3.0f);
     private Vector3 cameraTarget = Vector3.(0.0f, 0.0f, 0.0f);
     private Vector3 cameraUpVector = Vector3.(0.0f, 1.0f, 0.0f);

    딱보면 뭔지 알만하다.
    참고로 두번째 타켓점을 (0,0,0)일경우 Vector3.Zero 로 사용해도 된다.
    또한 업벡터(0,1,0)인 경우 Vector3.Up로 쉽게 표현 가능하다.

    결국 위와같이 선언해놓고 이렇게 하면 뷰행렬 값은 끝!!

     Matrix.CreateLookAt(ref cameraPosition, ref cameraTarget, ref cameraUpVector, out view);


    3. 마지막으로 월드행렬은...지지고뽁고 해야되니 담에..^^;

    간단히 private Matrix world = Matrix.Identity; 로 사용(항등행렬)


    'Programing > XNA' 카테고리의 다른 글

    SpriteBatch.Draw 메서드  (0) 2009.04.10
    ElapsedGameTime, ElapsedRealTime  (0) 2009.04.09
    게임 서비스 만들기  (0) 2009.03.30
    VertexPositionNormalTexture 구조체  (0) 2008.09.09
    XNA 프레임워크의 로직 흐름  (0) 2008.08.19
    Matrix Methods  (0) 2008.08.19
    XNA 이펙트  (0) 2008.08.13
Designed by Tistory.