메뉴 건너뛰기

창조도시 기록보관소

언어 [DX&C++]3D공간상 카메라 시점의 대한 정의

2007.04.01 00:05

실베 조회 수:389 추천:3

안녕하세요. Zeprod님의 빠른강의에 발맞추기 위하여 다시금 올립니다 -_-;; 이거 아는것도없는데 ㅠ.ㅠ


 


오늘은 카메라에 대해 알아보겠습니다.


 


카메라는 사람의 눈과 똑같습니다. 다만 다르게도 설정할수있지요.


 


사람의 눈의 시야 범위가 부채꼴 모양으로 생겼지요.


 


\                        /


  \        범위      /


     \                /


       \            /


          \       /


               눈


 


요래~ 요래~ 생겼지요. 카메라도 마찬가지입니다.


 


\      최대범위      /


  \                    /


     \                /


       \            /


          \       /


            최소범위


 


             모니터


 


모니터에 보이는 화면은 최소범위부터 최대범위까지입니다.


최소범위는 대부분 1.0f기준이며 최대범위는 설정 나름입니다. 최소범위조차도 정해줄수있습니다.


 


자그럼 본론으로 들어가지요.


 


VOID SetupMatrices( void )
{
 D3DXMATRIX matView, matProj, matLocal;
 
 D3DXMatrixLookAtLH( &matView,
   &D3DXVECTOR3( Eye.x, Eye.y, Eye.z ), //관찰자의 눈 위치
   &D3DXVECTOR3( Look.x, Look.y, Look.z), //관찰자가 쳐다 보는 위치
   &D3DXVECTOR3( Up.x, Up.y, Up.z ) );  //카메라의 윗방향 설정


 // 뷰 변환
 g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView );


 // 프로젝션 변환
 D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.333333f, 1.0f, 500.0f );
 g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );
}


 


화면의 카메라 지점을 설정햊는 것입니다. 짧지요? 이것만 설정해도 DirectX기초 카메라 설정은 끝납니다.


 D3DXMatrixLookAtLH( &matView,
   &D3DXVECTOR3( Eye.x, Eye.y, Eye.z ), //관찰자의 눈 위치
   &D3DXVECTOR3( Look.x, Look.y, Look.z), //관찰자가 쳐다 보는 위치
   &D3DXVECTOR3( Up.x, Up.y, Up.z ) );  //카메라의 윗방향 설정


 


matView에 카메라위치값을 설정해줍니다.


 


카메라의 위치가 어디이며 쳐다보는곳 그리고 어느정도 위에있는지를 설정해서 matView에 모든계산을 해서 넣어줍니다.


자세히 파고들어가면 한도끝도없으니 그냥 넘어가겠습니다.


 


뷰 변환


g_pd3dDevice->SetTransform( D3DTS_VIEW, &matView ); 셋팅한값을 생성해줍니다. 워우!!


 


/ 프로젝션 변환
 D3DXMatrixPerspectiveFovLH( &matProj, D3DX_PI/4, 1.333333f, 1.0f, 500.0f );
 g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj );


이건 화면 비율을 설정합니다.


D3DX_PI/4는 각도설정입니다. 시야의 좌우 각도를 설정해줍니다.


1.33333333f는 화면의 좌우 비율입니다. 4:3비율이기때문에 1.33333333f입니다. 와이드모니터가 없는 시절에는 1.3333333f를 그대로 썼지만 와이드모니터환경을 지원하느냐에 따라서 16:9가될수도 16:10이될수도있씁니다.


1.0f 화면에 최소범위입니다. 카메라와 대상체의 거리가 1.0f이하라면 화면에 찍히지 않습니다.


500.0f최대 화면 범위입니다. 카메라와 대상체의 거리가 500.0f이상이라면 화면에 찍히지 않습니다.


 


 g_pd3dDevice->SetTransform( D3DTS_PROJECTION, &matProj ); 셋팅한값을 생성합니다~


 


자 이렇게 설정하시면 셋팅한 값에 따라 화면이 적용됩니다.


 


자 쉽죠?


 


-_-;;

번호 제목 글쓴이 날짜 조회 수
82 3Ds Max로 모델링한거 띄우기 [1] file 랜스 2008.05.02 1147
81 서로 돕고 사는 세상~ Zeprod 2007.11.25 559
80 1. 게임 시나리오의 기초 [2] 샤르엘 2007.11.09 793
79 게임 시나리오 쓰기에 앞서 [2] 샤르엘 2007.11.09 523
78 [DX/VB] DirectDraw? 별거 아냐! (3) 더블 버퍼의 생성과 블리팅 [2] 악희 2007.08.01 624
77 [DX/VB] DirectDraw? 별거 아냐! (2) 블리팅, 그리고 투명도 [1] 악희 2007.07.30 570
76 [DX/VB] DirectDraw? 별거 아냐! (1) DirectDraw객체의 생성과 표면의 생성 [3] 악희 2007.07.27 631
75 [C++] 클래스(객체지향) - 기본 생성자와 소멸자 [3] Sirjhswin 2007.06.11 487
74 [C++] 한글과 영어가 섞인 문자열의 길이 체크 [4] Zeprod 2007.05.27 1427
73 [DX&C++] 화면에 글씨를 써볼까요. [2] Zeprod 2007.05.17 741
72 오랜만에 잡담 하나 [4] 아란 2007.04.27 367
71 [DX&C++] 3D를 넘어 2D로! [13] Zeprod 2007.04.11 831
70 [DX&C++] 지형을 만들어 봅시다. (Height Map) [1] Zeprod 2007.04.02 492
» [DX&C++]3D공간상 카메라 시점의 대한 정의 [3] 실베 2007.04.01 389
68 [DX&C++] IndexBuffer를 알아보자! [2] Zeprod 2007.03.31 334
67 [DX&C++] 3대 행렬 연산의 비대칭성(unsymmetry) [1] Zeprod 2007.03.31 303
66 3D좌표계에 3D물체를 찍기위환 기초과정 [3] 실베 2007.03.30 378
65 [DX&C++] 3대 행렬 연산의 사용 [3] Zeprod 2007.03.16 842
64 [DX&C++] 3D를 다루는 프로그램의 개요 [3] Zeprod 2007.03.13 403
63 template에 관한 간단한 예. [2] 김두한 2007.03.12 237