ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 2. 카메라 클래스
    프로그래밍/3D게임프로그래밍 2014. 4. 16. 01:50
    반응형

    카메라 클래스에서 가장 중요한 멤버 변수는 뷰 변환에 대한 뷰 행렬 , 투영 변환에 대한 투영 행렬입니다. 카메라 클래스는 화면과 카메라에 대한 정보를 입력 받아 이둘의 행렬을 만드는 것이 주 임무라 하겠습니다.

    뷰 행렬을 만들기 위해서 카메라의 위치 (Eye vector), 카메라가 보고 있는 지점(Look Vector), 그리고 카메라의 업 벡터(Up Vector)가 필요한데 이들의 멤버 변수와 카메라를 생성하는데 필요한 Create() 함수 , 카메라의 뷰 행렬과 투영 행렬을 갱신하는 FrameMove()함수를 기본으로 하는 클래스를 다음과 같이 작성합니다.






    카메라의 생성과 초기화를 담당하는 CCmera::Create() 함수에서 카메라의 Eye, Look, Up벡터를 초기화 합니다.


    투영 행렬은 게임에서 카메라 액션 등을 처리할 때 자주 바꾸지만 우리는 카메라의 기초 강의가 끝날 때 까지

    투영 행렬은 변함이 없다고 생각하고 다음과 같이 DirectX SDK에서 지원하는 D3DMatixPerspectiveFovLH()함수를

    통해서 먼저 투영 행렬을 만듭니다. 투영 행렬은 이후 강의에서 만드는 과정을 다시 설명할 것입니다.

    참고로 D3DMatrixPerspectiveFovLH() 함수는 왼손 좌표계(LH: Left Hand Coordinate System), 투시 투영(Perspective)

    ,시야 각(FOV: Field OF View) , 화면 종횡 비 (Aspect Ratio: Screen Width/ Screen Height),가상 화면의 근거리 (가까운 면:Near), 가상 화면의 원거리(Far)을 인수로 하는 투영 행렬을 만드는 함수 입니다. 다음 코드에서는 시야 각 45도(π/4.f)

    ,종횡비(800.f/600.f), Near(1.f), Far(5000.f)를 인수로 해서 투영 행렬을 만들었습니다.





    카메라의 갱신을 담당하는 FramMove() 함수에서는 카메라의 위치(Eye), 또는 Look 벡터가 달라지면 이들 값을 갱신하고 뷰 행렬을 만들어 냅니다. 

    다음 코드는 먼저 카메라 객체가 동작을 하고 있는지 Left, Light, Up, Down키로 테스트 할 수 있도록 작성했습니다. 

    또한 뷰 행렬을 만들기 위해서 D3DXMatixLookAtLH()함수를 이용했고, 이 함수를 만드는 방법은 이후 강의 에서 다시 설명하겠습니다.





    카메라 객체를 CMain 클래스에서 선언한 다음 SAFE_CREATE라는 매크로를 이용해서 생성합니다.

    SAVE_NEWCREATE1 매크로에 대한 내용은 코드를 살펴보기 바랍니다.




    CMain 클래스의 FrameMove() 함수 안에서 카메라 객체를 갱신합니다. SAFE_FRMOV 는 객체의 멤버 함수

    FrameMove() 함수를 호출 하는 매크로입니다.


    전체 코드는 다음 예제를 살펴 보기 바랍니다.

     

    cam11_class.zip









    반응형

    '프로그래밍 > 3D게임프로그래밍' 카테고리의 다른 글

    랜더링 파이프라인  (0) 2014.04.20
    3. 뷰 행렬  (0) 2014.04.16
    1. 카메라 기초  (0) 2014.04.16
    벡터와 행렬 함수  (0) 2014.02.15
    3. vertex  (0) 2013.11.23
Designed by Tistory.