1. 준비
디렉트 x 프로그래밍을 하려면 Software Development Toolkit 이 필요하다.
아래는 MS 가 제공하는 문서. 레퍼런스로 가장 유용하다.
C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Samples\C++\Direct3D11
SDK 를 깔고 따로 위치 변경을 하지 않을 시, 위 경로에 샘플 파일들이 있다.
그중 튜토리얼이 초반에 학습하기에 적합하다.
최신 SDK 를 학습하려면 2010 어쩌고의 vcsproj 파일을 실행하자.
2. 연결하기
기준은 비주얼 스튜디오이다.
c++ 프로젝트를 console 말고 windows application 으로 하나 만들자.
Direct X SDK 는 비주얼 스튜디오에서 다운받은게 아니라서 따로 링크하고 디렉토리를 연결해야한다.
모든건 Project -> Property 에서 처리한다.
Linker -> Input -> Additional Dependencies 에
d3d11.lib
d3dxlid.lib
D3DCompiler.lib
Effectslid.lib
dxerr.lib
dxgi.lib
dxguid.lib
를 넣어준다.
Configuration Properites -> VC ++ Directories 에서
Executable 에
C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Utilities\bin\x86
Include 에
C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Include
Library 에
C:\Program Files (x86)\Microsoft DirectX SDK (June 2010)\Lib\x86
를 넣자.
64 비트를 쓸거면 x86 에서 x64로 바꾸면 된다.
만약 다운받은 SDK 경로가 다르다면 그거에 따라 맞춰야한다.
이때 호환성을 위해서 매크로 설정을 하기도 한다. DH(Include를), DL(Lib를) 를 Property Manager -> .user 를 더블클릭해서 나오는 user_macro 에 추가하고, 위의 경로자리에 ;$(DH) 이런식으로 넣는다.
3. XMVECTOR
이하는 번거롭고 문제가 있다고 실무에서 dxd10math, dxd11math 를 쓰니 별 필요 없겠지만, 일단 책에서 소개하고 알아두면 좋을거 같긴 하니 메모해둔다.
D3DX 가 Direct X 9 까지 벡터계산을 지원했는데 11에 와서 XNA 라이브러리가 지원한다. 이 라이브러리는 128 비트 레지스터인 SIMD(single instruction multiple data) 레지스터를 사용하여 32 bit float 4개를 한번에 계산하는 SSE2(Streaming SIMD Extensions 2) 명령어 셋 (아마 기계어 수준) 을 사용한다. 하나의 명령어로 4d 벡터를 계산하므로 빠르다 <xnamath.h> 로 인클루드 하면 된다.
기본적으로 SIMD 가 지원하는 자료형은 XMVECTOR 이다. 근데 SIMD 는 사용되려면 주소가 16 비트로 나뉘어지도록 되어야한다. 그래서 클래스 등 주소 할당이 삐뚤빼뚤한데서는 XMFLOAT2, XMFLOAT3, XMFLOAT4 를 사용하도록 권장된다. 연산이 필요할 경우 이걸 XMVECTOR 로 변환해서 사용해야 하드웨어적 지원을 받는다.
아래는 Float 따리와 변환, 로드 함수.
보면 FXMVECTOR 라는 생소한게 보일텐데, 함수 등에 XMVECTOR 를 넣을 때 규칙이 있기 때문이다.
처음 3개는 FXMVECTOR 로 , 나머지는 CXMVECTOR 로 보내라는 것이 그 규칙인데 이유는 운영체제 종류마다 SIMD 를 효율적으로 처리하는 방법이 다르기 때문이다. 이하 아래 참고.
파라미터 제외, 상수로 XMVECTOR를 쓸 때는 XMVECTORF32 를 사용해야한다. 위와 비슷한 이유겟거니 한다.
정수로 할 경우, XMVECTORU32 를 사용해야한다.
XMVECTOR 은 연산자 오버로딩이 되어있는데 안쓸꺼면 XM_NO_OPERATOR_OvERLOADS 를 정의하면 된다. 안쓰는 이유는 함수로 하는게 복잡한 계산일 때 더 빠르다나. 자세한건 컨트롤 클릭 해서 살펴보자.
행렬은 XMMATRIX 라는 클래스를 지원
4. D3DX10math
<D3DX10math.h> 가 Direct X 11 에서 여전히 쓰인다.
벡터 표현용 자료형으로 D3DXVECTOR2, D3DXVECTOR3, D3DXVECTOR4 구조체가 지원된다.
행렬 표현용 자료형으로 D3DXMATRIX 구조체가 지원된다.
평면 표현용 자료형으로 D3DXPLANE 구조체가 지원된다.
연산자 오버로딩 등 자세한건 컨트롤 클릭 해보자.
벡터연산용 함수는 D3DXVec3 으로 시작해서 계산 이름이 붙으니 비주얼 스튜디오의 자동완성기능을 활용하자.
행렬연산용 함수는 D3DXMatrix 으로 시작해서 ;;
평면연산용 함수는 D3DXPlane 으로 ;;
댓글 없음:
댓글 쓰기