-
DirectX 11을 이용한 3D게임 프로그래밍 입문 연습문제 6 - 10Graphics/DX11 물방울책 연습문제 풀이 2021. 3. 23. 21:49
문제
정점 구조체에서 128비트 색상대신 32비트 색상을 사용하라.
해결
input element desc 구조체배열의 내용을 바꾸도록 한다. 그리고 vertex의 color변수도 xmcolor로 바꿔주도록 한다.
뭔가 색깔이 많이 바뀌었다. 메모리 소비량을 줄였을뿐인데 이렇게 색이 변질된다면 모처럼 바꾼 의미가 없다. 원인을 알아보자.
사각뿔을 기준으로 보았을 때 빨간색이 파란색으로 바뀌었다. 분명 코드내에서는 Red로 값을 넣었는데도 불구하고 말이다.
이는 XMCOLOR가 ARGB가아닌 ABGR방식으로 값을 저장하기 때문인데 nampspace Colors의 변수들은 ARGB형태로 값이 저장되어 있었기 때문이다. 즉 r(빨강)변수값이 b(파랑)으로 들어가기 때문에 색이 변질된것이다.
a : 255 -> a : 255
r : 255 -> b : 255
g : 0 -> g : 0
b : 0 -> r : 0그렇다면 ARGB를 ABGR로 바꿔주는 기능이 필요하다.
d3dUtil 헤더파일에 Convert::ArgbToAbgr 함수가 있다. 말그대로 argb를 agbr로 바꿔주는 우리가 찾던 기능인데 매개변수가 UINT이다. 값을 어떻게 전달해야할까?
XMCOLOR는 8비트의 각각 argb값들을 하나의 UINT에 값을 저장하는 패킹(packing)기능이 있다. 실제로 XMCOLOR 멤버변수중에 c라는 uint형 변수가 하나있다. argb값에 따라 자동으로 값이 변한다. 이 변수를 함수인자로 넣으면 된다.
아래는 그것을 적용한 소스코드이다.
음, 문제없다. 굳
'Graphics > DX11 물방울책 연습문제 풀이' 카테고리의 다른 글
DirectX 11을 이용한 3D게임 프로그래밍 입문 연습문제 7 (0) 2021.04.03 DirectX 11을 이용한 3D게임 프로그래밍 입문 연습문제 6 - 12 (0) 2021.03.24 DirectX 11을 이용한 3D게임 프로그래밍 입문 연습문제 6 - 8 (0) 2021.03.21 DirectX 11을 이용한 3D게임 프로그래밍 입문 연습문제 6 - 7 (0) 2021.03.21 DirectX 11을 이용한 3D게임 프로그래밍 입문 연습문제 6 - 4 (0) 2021.03.21