사실 원래 좀 적을게 많은데 다 까먹어버렸구 까먹기전에 하나라도 더 적고자...

 

뭐. 학원과정중인데, D3DX - 2DX 때는 스프라이트가 표현을 전부 도와줬지만,

D3DX에서는 원래 버텍스를 세팅하고, 표면을 만들어서 그 위에다 덧 씌우는 식으로 작업이... 되어야 하는데...

 

이게 일단 설명없이 시도해보려고 하니까 되게 막막하더라.

 

일단... 하다가 막혔던것 위주로.

 

1. 선생님! 텍스쳐 입혔는데 텍스쳐가 박살나요!

작업중에 이런 광경을 목격했다.

처음에는 이게 무슨 상황인지 전혀 이해가 안되어서 (분명 Y축값은 전부 0이었다!) 좀 유심히 찾아본결과...

 

단순 Color만 들어가있는 CVERTEX 구조체와, UV가 들어가있는 UVERTEX 구조체의 사이즈가 다른데 VERTEX구조체를 변경했음에도 불구하고 기본 버텍스 사이즈를 변경하지 않아서 생긴 문제였다.

 

뭔 소리냐... 하면...

 

 

이 파트 얘긴데

 

우측 26번줄에서 버텍스 타입을 VTX_TEXTURE (=UVERTEX 구조체) 로 변경했음에도 불구하고 버텍스 사이즈 변수가 여전히 VTX_COLOR (=CVERTEX)로 지정되어있는것이다...

해서, SetStreamSource 할때는 CVERTEX 사이즈로 읽는데, 정작 버퍼에 들어간건 UVERTEX니까 저렇게 엉망진창으로 나올수밖에...

 

 

 

2. 선생님! 텍스쳐를 여러개 넣었는데 하나만 출력돼요!

 

이거는 솔직히 이해가 좀 잘 안됐(고, 아직도 잘 안되)는데...

 

먼저, 2D 시절에 텍스쳐를 그릴때 어떻게 했는지 다시 보고 오자.

 

맨 마지막줄이다.

 

 

CGraphic_Device::Get_Instance()->Get_Sprite()->Draw(pTexInfo->pTexture, nullptr, &D3DXVECTOR3(fCenterX, fCenterY, 0.f), nullptr, D3DCOLOR_ARGB(255, 255, 255, 255));

 

이 말은 즉슨, "장치를 통해 생성된 스프라이트에 크기를 지정해주고, 지정된 텍스쳐를 출력시킨다" 라는 의미.

 

즉, 장치를 이용해서 텍스쳐를 지정해주고 있다는 얘기와 일치... 한다고 볼 수 있을까? (솔직히 확신이 들진 않는다)

 

 

아무튼... 이래서 텍스쳐를 두개 불러왔음에도 불구하고 세팅을 하나만 해주면

 

그냥 처참하게 모든 물체에 같은 텍스쳐가 입혀지게 된다.

 

그래서 어쩌란거냐? 랜더할때 텍스쳐를 매번 지정해줘야 한다는것이다...

 

"아니 선생님, 그러면 매번 엑세스한다고 자원낭비되고 뭐 그런거 없나요?"

 

라는 질문이 들어온다면

 

"애초부터 그러고 있었다" 라는 대답밖에는 나올게 없다...

 

이제와서 깨달은 얘기지만, 랜더 하고 있을때 매번 스프라이트를 지정해주고 있지 않았던가...

 

그럼 뭐, 3D에서도 별 다른건 없다고 생각한다. 역시나 여기서도 텍스쳐를 매번 지정해줘야지

 

 

 

결과물. 이미지가 뒤집힌건 단순히 uv를 잘못준것이다.

 

가끔씩은 이해가 안되더라도 일단 납득부터 하는게 통할때도 있는것 같다...

당연하게도 세팅을 위해서 라이브러리 추가를 해줘야 한다고 생각해서,

VS 프로젝트를 생성한 이후 추가메뉴를 찾다가 까먹어버린바람에...

'근데 얘들 기본 SDK로 들어왔으니까 있지 않을까?' 하고 바로 include를 시도해봤는데...

 

 

 

아니 이게 왜 다 있어?

 

DX10부터 12까지 다 있네요?

 

음...

 

아니 이러면 진짜 설치할 필요가 없었던거 아니었나? 

다이렉트 X 11의 경우 :

 

https://www.microsoft.com/en-us/download/details.aspx?id=6812

 

DirectX SDK - (June 2010)

Download the complete DirectX SDK, which contains the DirectX Runtime and all DirectX software required to create DirectX compliant applications.

www.microsoft.com

 

MS 공식홈페이지에서 DX11 sdk를 설치한다. (왜 2010년이 마지막인지는...)

 

그리고 Windows 10 SDK를 설치해줘야하는데...

 

 

Visual Studio 2017 이후 버전을 사용하시는 사용자들의 경우, 설치 옵션에서
'C++를 이용한 게임 개발' 을 활성화 하셨다면, 자동으로 Windows 10 SDK 까지 설치가 되어있을겁니다.

 

 

이 경우에는 추가적인 설치를 하실 필요는 없습니다만, SDK 가 설치되지 않았을 가능성이 있으니 해당 항목을 확인해줍니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

...라고 기껏 써놨는데 검색해보니 Direct X 11.x 이후부터는 전부 Windows 10 SDK에 포함이라네요.

생각해보니 굳이 구버전 Direct X를 쓸 필요가 있긴 했나 싶긴 했습니다...

 

어쩐지 에러뜨더라...

 

역시 모르면 당해봐야 제맛

에러 해결법도 '최신 버전을 삭제하고 설치후 최신버전 재설치하세요' 라고 하니, 심각한 문제가 발생하기 전까지는 Windows 10 SDK에 탑재된 버전을 이용하는것으로 하겠습니다.

 

최신 버전 설치 및 사용 안내는 다음 링크를 참고바랍니다 :

https://docs.microsoft.com/ko-kr/windows/win32/direct3d12/directx-12-programming-environment-set-up

 

Direct3D 12 프로그래밍 환경 설정 - Win32 apps

생산성 높은 Direct3D 12 개발 환경을 구성하는 설치, 도구 및 지원되는 라이브러리를 설명합니다.

docs.microsoft.com

 

P.S : DX11.x

https://docs.microsoft.com/en-us/windows/win32/api/_direct3d11/

 

Direct3D 11 Graphics - Win32 apps

Direct3D 11 Graphics 01/11/2019 48 minutes to read In this article --> Overview of the Direct3D 11 Graphics technology. To develop Direct3D 11 Graphics, you need these headers: For programming guidance for this technology, see: Enumerations Functions Title

docs.microsoft.com

 

+ Recent posts