GetDeclaration를 이용하여 FVF사이즈 구하기
DirectX 라이브러리를 사용하다 보면 FVF값을 이용해야 할 일이 종종 생깁니다.
사용자가 FVF값을 직접 하나씩 지정해주면 문제가 없지만 다른 3D 프로그램에서 X파일로 export 할경우 값이 원하는대로 지정되지 않는경우도 있지요.
이번에 제가 겪었던 부분은 3ds max 에서 kw x-port를 통해 x파일을 export 할시 FVF가 제대로 저장이 되지 않는 문제였습니다.
FVF가 제대로 저장이 되지 않는다기보단 FVF값을 아예 기록하지 않는듯 보였습니다.
맥스상에서 설정을 해줘야 하는 부분인지, 익스포터의 문제인지 아직까지 해결은 못하였지만 다른방법을 이용하여 FVF의 사이즈를 구할 수 있었습니다.
일반적으로 FVF의 사이즈를 구하는 방법은 D3DXGetFVFVertexSize()를 이용하는데, 이 경우에는 GetFVF() 를 함께 사용해야 하기에 문제가 생길 소지가 있습니다.
( GetFVF()는 FVF Flag가 저장된 순서가 틀리거나 FVF가없으면 0을 리턴합니다 )
그래서 몇시간동안 이 문제를 해결하지 못하다가 구글링의 도움으로 끝내 해결하게 되었습니다.
바로 Declaration 값을 이용한 방법인데요, 사용법은 다음과 같습니다.
D3DVERTEXELEMENT9 decl[MAX_FVF_DECL_SIZE];
pMesh->GetDeclaration( decl );
UINT size = D3DXGetDeclVertexSize( decl, 0 );
여기서 얻게되는 size 값은 D3DXGetFVFVertexSize( pMesh->GetFVF() ) 의 값과 같습니다.
예전에 기초 공부를 하다가 Declaration을 이용해 FVF를 재정렬하는 방법도 얼핏 본 것 같았는데 한번 그 부분도 다시 찾아봐야겠네요..
'Programming > DirectX' 카테고리의 다른 글
| GetDeclaration를 이용하여 FVF사이즈 구하기 (0) | 2010/04/16 |
|---|---|
| Shadow Map Test (0) | 2010/01/28 |
| 충돌처리 과부하 테스트 (0) | 2010/01/26 |
| 기본적인 충돌처리 구현 (0) | 2010/01/21 |
| Shadow Map (0) | 2010/01/16 |
| 애니메이션 블렌딩 (0) | 2010/01/14 |


댓글을 달아 주세요