본문 바로가기

예전/3D

[3D] GetTransform과 GetViewport


HRESULT GetTransform(D3DTRANSFORMSTATETYPE state,D3DMATRIX *pMatrix);

state 는 변경 대상의 장치 state변수이고, pMatrix는 돌려받는 변환 상태를 나타내는 D3DMATRIX 구조체의 포인터이다.


이 함수는 D3DCREATE_PUREDEVICE를 사용해 생성한 장치의 장치 state를 돌려주지 않는다.

이 함수를 사용하려면, D3DCREATE외에 몇 개의 플래그값을 추가로 더 지정해 장치를 생성할 필요가 있다.


GetTransform은 LPDIRECT3DDEVICE 클래스의 멤버 함수로써 현재 사용중인 Device의 정보를 가져올 수 있다.

예를 들면, Device에서 사용중인 카메라의 matrix 정보 등을 가져올 수 잇는데, 이때 가장 중요한 것은

현재 렌더링이 소프트웨어 렌더링 상태에서만 이 함수가 적용된다는 것이다.


D3DCREATE_PUREDEVICE란, 읽기기능이 배제된 상태에서 쓰기만 가능하게하고, Get*() 관련 함수는

모두 동작하지 않는다.

그래서 state를 직접 관리해줘야해서 귀찮지만, 빠르다.


D3DCREATE_PUREDEVICE를 사용하면 GetTransform함수로 내부 상태를 얻어오지 못한다. 함수를 사용하기 원한다면 디바이스 생성시

이 Flag를 사용하지 않으면 되고, 만약 상속해서 쓴다면, 


HRESULT ConfirmDevice(D3DCAPS9*, DWORD, D3DFORMAT, D3DFORMAT ) 함수에 다음과 같은 코드를 넣으면 된다. 

if( dwBehavior & D3DCREATE_PUREDEVICE ) 

{

// GetTransform 이 PUREDEVICE에서 작동하지 않는다.

return E_FAIL;

}


HRESULT GetViewport(D3DVIEWPORT* pViewport);

돌려받는 뷰포트 파라미터를 나타내는 D3DVIEWPORT9 구조체 포인터, 반환에 성공했을 경우엔 D3D_OK를 돌려준다. 하지만, 무효의 경우에는

D3DERR_INVALIDCALL을 return 한다.


보통, state를 돌려주는 함수는 D3DCREATE_PUREDEVICE를 사용해 생성한 장치에서는 가능하지 않으나 이것은 예외적이다.

이것은, MS의 Dx가 퓨어 장치에 대해서도 뷰포트 데이터를 추적할 필요가 있기 때문이다.


GetViewport 는 뷰포트를 얻어오는 함수이다.



'예전 > 3D' 카테고리의 다른 글

[3D] Texture 함수  (0) 2012.10.11
[3D] 밉맵  (0) 2012.10.11
2D 좌표를 3D좌표로 바꾸는 함수  (0) 2012.09.27
피킹참조자료 주움  (2) 2012.09.27
[UI엔진] 처음 내 프로젝트를 만들고서  (0) 2012.09.27