반응형

윈도우 태블릿을 구매하고 DirectX11 코딩을 위해 환경설정을 했다.


Visual Studio 2017을 설치할 때 이전에 개발할 때 사용했던 SDK보다 높은 버전의 Window SDK를 설치했었기 때문에

SDK 버전만 맞춰주니 빌드가 잘 되었다.


그런데 실행해 보니 DirectX11 초기화가 실패했다.


처음에는 막연히 태블릿이 지원안하나 하고 봤는데 이론상 DirectX12까지 지원하는 내장 그래픽 카드였다.

그래서 드라이버에 문제가 있나 하고 보니 최신 드라이버가 설치되어있었다.

다시 에러를 보니 HRESULT값이 0x887a002d였다.


관련 검색을 해보니 내가 추가한 Flag와 관련이 있었다.

DEBUG 모드로 실행할 때 D3D11_CREATE_DEVICE_DEBUG flag를 추가하고 Device를 초기화했는데


이때 윈도우 상에 그래픽 진단 도구가 설치되어 있지 않으면 초기화때 실패한다.

이를 해결하기 위해서는 아래 링크에 들어가서 설치하면 된다.


https://docs.microsoft.com/ko-kr/windows/uwp/gaming/use-the-directx-runtime-and-visual-studio-graphics-diagnostic-features


간단히 요약하면 아래와 같다.

  1. 설정으로 이동하여 시스템을 선택하고 앱 및 기능을 선택하고 선택적 기능 관리를 클릭합니다.
  2. 기능 추가를 클릭합니다.
  3. 선택적 기능 목록에서 그래픽 도구를 선택한 다음 설치를 클릭합니다.
개인적인 경험으로는 설치가 완료하고 바로는 적용이 안되었고 재부팅을 하니 적용이 되었다.
(윈도우 업데이트가 되는듯??)


아마 Release 모드로 실행했으면 되었을 것만 같은 느낌이다.



반응형
Posted by msparkms
,
반응형


기본 프레임워크를 만들고 Assimp 라이브러리를 붙이기로 결정했다.


아직은 구조가 마음에 들지는 않지만 일단 테스트삼아 라이브러리에 있는 기본 모델을 얼른 띄워봤다.


간단하게 퐁 쉐이딩을 붙였는데 역시 안 예쁘다. -0-;; 일단 테스트니까..;;


이후에는 본과 애니메이션 정보를 얻어와서 적용해 봐야겠다.




반응형
Posted by msparkms
,
반응형

DirectX 10 까지는 D3DX library의 3D Math쪽을 사용하였지만 DirectX 11부터는 XNAMath library가 제공된다.


XNAMath libarary는 SSE2 명령어 세트로 만들어진 라이브러리이다.

기본적으로 속도도 빠르고 병렬처리가 가능하므로 잘만 이용하면 알고리즘 최적화 등에도 사용할 수 있다.

어떤식을 디자인되었는지 궁금하면 Designing Fast Cross-Platform SIMD Vector Libraries를 참고하라.

#include <xnamath.h> 만 넣어주면 된다.


따로 라이브러리 추가도 필요없다. -> 헤더에 인라인 함수로 모두 구현되어 있다.

이전 함수는 접두사로 D3DX가 붙었는데 XNAMath는 XM이 붙는다.

대부분 함수 이름들이 비슷하니 금방 적응 할 수 있을 것이다.

XMVECTOR


로컬이나 전역 변수로는 XMVECTOR를 추천한다.


Class의 멤버 변수로는 XMFLOAT2, XMFLOAT3, XMFLOAT4를 추천한다.

위의 타입은 SIMD의 장점을 취하지 않는다. -> 그냥 일반 구조체

SIMD를 사용하기 위해서는 XMVECTOR 타입을 이용해야 한다.

loading 함수는 XMFLOAT*를 XMVECTOR로 변환하는데 사용된다.
storage 함수는 XMVECTOR를 XMFLOAT*로 변환하는데 사용된다.

loading 함수

XMVECTOR XMLoadFloat2(CONST XMFLOAT2* source);
XMVECTOR XMLoadFloat3(CONST XMFLOAT3* source);
XMVECTOR XMLoadFloat4(CONST XMFLOAT4* source);

XMVECTOR XMLoadInt3(CONST UINT* source);
XMVECTOR XMLoadColor(CONST XMCOLOR* source);
XMVECTOR XMLoadByte4(CONST XMBYTE4* source);

storage 함수

VOID XMStoreFloat2(XMFLOAT2* dest, FXMVECTOR V);
VOID XMStoreFloat3(XMFLOAT3* dest, FXMVECTOR V);
VOID XMStoreFloat4(XMFLOAT4* dest, FXMVECTOR V);

VOID XMStoreInt3(UINT* dest, FXMVECTOR V);
VOID XMStoreColor(XMCOLOR* dest, FXMVECTOR V);
VOID XMStoreByte4(XMBYTE4* dest, FXMVECTOR V);

get, set 함수

FLOAT XMVectorGetX(FMXVECTOR V);
FLOAT XMVectorGetY(FMXVECTOR V);
FLOAT XMVectorGetZ(FMXVECTOR V);
FLOAT XMVectorGetW(FMXVECTOR V);

XMVECTOR XMVectorSetX(FXMVECTOR V, FLOAT x);
XMVECTOR XMVectorSetY(FXMVECTOR V, FLOAT y);
XMVECTOR XMVectorSetZ(FXMVECTOR V, FLOAT z);
XMVECTOR XMVectorSetW(FXMVECTOR V, FLOAT w);

파라미터

// 32bit
typedef const XMVECTOR FXMVECTOR;
typedef const XMVECTOR& CXMVECTOR;

// 64bit
typedef const XMVECTOR& FXMVECTOR;
typedef const XMVECTOR& CXMVECTOR;

상수


typedef _DECLSPEC_ALIGN_16_ struct XMVECTORF32 {
     union {
          float f[4];
          XMVECTOR v;
     };
};

XMVECTOR, __m128i, __m128d 오퍼레이터가 구현되어 있음.

XMVECTORU32도 있음.

연산자 오버로딩


기본적으로 필요한 것들은 다 되어 있다.

추가 사항


MX_PI
XM_2PI
XM_1DIVPI
XM_1DIV2PI
XM_PIDIV2
XM_PIDIV4

XMFINLINE FLOAT XMConvertToRadians(FLOAT degree);
XMFINLINE FLOAT XMConvertToDegrees(FLOAT radian);

XMMin(a, b)
XMMax(a, b)

XMVerifyCPUSupport() 함수로 SSE2를 지원하는지 체크 가능.

Setter 함수


XMVECTOR XMVectorZero();
XMVECTOR XMVectorSplatOne();
XMVECTOR XMVectorSet(FLOAT x, FLOAT y, FLOAT z, FLOAT w);
XMVECTOR XMVectorReplicate(FLOAT s);
XMVECTOR XMVectorSplatX(FXMVECTOR V);
XMVECTOR XMVectorSplatY(FXMVECTOR V);
XMVECTOR XMVectorSplatZ(FXMVECTOR V);

Vector 함수


XMVECTOR XMVectorAdd(FXMVECTOR V1, FXMVECTOR V2);
XMVECTOR XMVectorSubtract(FXMVECTOR V1, FXMVECTOR V2);
XMVECTOR XMVectorMultiply(FXMVECTOR V1, FXMVECTOR V2);

XMVECTOR XMVector3Length(FXMVECTOR V);
XMVECTOR XMVector3LengthSq(FXMVECTOR V);
XMVECTOR XMVector3Dot(FXMVECTOR V1, FXMVECTOR V2);
XMVECTOR XMVector3Cross(FXMVECTOR V1, FXMVECTOR V2);
XMVECTOR XMVector3Normalize(FXMVECTOR V);
XMVECTOR XMVector3Orthogonal(FXMVECTOR V);
XMVECTOR XMVector3ANgleBetweenVectors(FXMVECTOR V1, FXMVECTOR V2);
VOID          XMVector3ComponentsFromNormal(XMVECTOR* parallel, XMVECTOR* perpendicular, FXMVECTOR V, FXMVECTOR normal);
VOID          XMVector3NotEqual(FXMVECTOR V1, FXVECTOR V2);

XMVECTOR XMVectorAbs(FXVECTOR V);
XMVECTOR XMVectorCos(FXVECTOR V);
XMVECTOR XMVectorLog(FXVECTOR V);
XMVECTOR XMVectorExp(FXVECTOR V);
XMVECTOR XMVectorPos(FXVECTOR V, FXVECTOR P);
XMVECTOR XMVectorSqrt(FXVECTOR V);
XMVECTOR XMVectorSwizzle(FXMVECTOR V, UINT E0, UINT E1, UINT E2, UINT E3);
XMVECTOR XMVectorMax(FXVECTOR V1, FXVECTOR V2);
XMVECTOR XMVectorMin(FXVECTOR V1, FXVECTOR V2);

XMFINLINE BOOL XMVector3NearEqual(FXMVECTOR U, FXMVECTOR V, FXMVECTOR epsilon);

등등 많은 함수 제공한다.

XMMATRIX


로컬이나 전역 변수로는 XMMATRIX를 추천한다.

Class의 멤버 변수로는 XMFLOAT4X4를 추천한다. -> XMVECTOR와 마찬가지로 구조체 패딩 정렬등의 문제.

대표적인 함수

XMMATRIX  XMMatrixIdentity();
BOOL          XMMatrixIsIdentity(CXMMATRIX M);
XMMATRIX  XMMatrixMultiply(CXMMATRIX M1, CXMMATRIX M2);
XMMATRIX  XMMatrixTranspose(CXMMATRIX M);
XMVECTOR  XMMatrixDeterminent(CXMMATRIX M);
XMMATRIX  XMMatrixInverse(XMVECTOR* determinent, CXMMATRIX M);

파라미터

typedef const XMMATRIX CXMMATRIX;

TRANSFORMATION


XMMATRIX  XMMatrixScaling(FLOAT ScaleX, FLOAT ScaleY, FLOAT ScaleZ);
XMMATRIX  XMMatrixScalingFromVector(FXMVECTOR Scale);
XMMATRIX  XMMatrixRotationX(FLOAT Angle);
XMMATRIX  XMMatrixRotationY(FLOAT Angle);
XMMATRIX  XMMatrixRotationZ(FLOAT Angle);
XMMATRIX  XMMatrixRotationAxis(FXMVECTOR Axis, FLOAT Angle);
XMMATRIX  XMMatrixTranslation(FLOAT OffsetX, FLOAT OffsetY, FLOAT OffsetZ);
XMMATRIX  XMMatrixTranslationFromVector(FXMVECTOR Offset);

XMVECTOR XMVector3Transform(FXMVECTOR V, CXMMATRIX M);
XMVECTOR XMVector3TransformCoord(FXMVECTOR V, CXMMATRIX M);
XMVECTOR XMVector3TransformNormal(FXMVECTOR V, CXMMATRIX M);

더 자세한건 도큐먼트를 참고하면 될 것 같다.

앞으로 사용해보면서 중요한 내용이 있거나 팁이 있으면 올리도록 하겠다.





반응형
Posted by msparkms
,
반응형




DirectX 11 버전의 용책이다. ㅎㅎ


DirectX 11을 공부해보고 싶어서 구입해 봤다.


이 책을 기준으로 서서히 정리해 보고 응용도 해보려고 한다.

반응형

'프로그래밍 > DirectX 11' 카테고리의 다른 글

DirectX11 초기화 0x887a002d 에러 해결  (0) 2018.04.14
Assimp 3.0 연동중  (0) 2012.10.17
XNAMath 라이브러리 간단 소개  (0) 2012.09.27
Posted by msparkms
,