-
Notifications
You must be signed in to change notification settings - Fork 4
/
수정사항.txt
149 lines (118 loc) · 6.74 KB
/
수정사항.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
*작업 내용
*공통 사항
- 프로젝트 링커 인풋
디버그 : d3d11.lib;Effects11d.lib
릴리즈 : d3d11.lib;Effects11.lib
만 추가하면 동작합니다.
- VC++ directories 수정
인클루드 ../../Common
라이브러리 ../../Common
로 변경
- 프로젝트 Common 폴더
dxerr.h, cpp
DDSTextureLoader.cpp, h // (소스코드 변경사항은 DDS 관련 참고)
추가
- common 일부 파일
using namespace DirectX;
using namespace DirectX::PackedVector;
추가 // DirectxMath 지원
- 쉐이더 관련
기존 custom 빌드를 VS에서 지원하는 HLSL 컴파일러로 변경(디버깅 지원)
- Item Type = custom -> HLSL Compiler
- 쉐이더 타입 /fx
- 쉐이더 모델 5.0
- output files - object file name - FX\%(Filename).fxo
* 텍스처 로드 관련
-DDS 파일
- 소스코드 변경점
일부 필요한 프로젝트에 DDSTextureLoader.cpp, h가 프로젝트 common 폴더에 추가.
HR(D3DX11CreateShaderResourceViewFromFile(md3dDevice,
L"Textures/grass.dds", 0, 0, &mGrassMapSRV, 0 ));
HR(D3DX11CreateShaderResourceViewFromFile(md3dDevice,
L"Textures/water2.dds", 0, 0, &mWavesMapSRV, 0 ));
HR(D3DX11CreateShaderResourceViewFromFile(md3dDevice,
L"Textures/WireFence.dds", 0, 0, &mBoxMapSRV, 0 ));
에서
// using namespace DirectX; 를 선언했다면 DirectX::는 지우시면됨.
ID3D11Resource* texResource = nullptr;
HR(DirectX::CreateDDSTextureFromFile(md3dDevice,
L"Textures/grass.dds", &texResource, &mGrassMapSRV));
ReleaseCOM(texResource); // view saves reference
HR(DirectX::CreateDDSTextureFromFile(md3dDevice,
L"Textures/water2.dds", &texResource, &mWavesMapSRV));
ReleaseCOM(texResource); // view saves reference
HR(DirectX::CreateDDSTextureFromFile(md3dDevice,
L"Textures/WireFence.dds", &texResource, &mBoxMapSRV));
ReleaseCOM(texResource); // view saves reference
과 같이 변경됨.
- 기타 버그
Chapter 11 The Geometry Shader/TreeBillboard 에서 dds 파일을 로드하는 부분.
std::vector<std::wstring> treeFilenames;
treeFilenames.push_back(L"Textures/tree0.dds");
treeFilenames.push_back(L"Textures/tree1.dds");
treeFilenames.push_back(L"Textures/tree2.dds");
treeFilenames.push_back(L"Textures/tree3.dds");
mTreeTextureMapArraySRV = d3dHelper::CreateTexture2DArraySRV(
md3dDevice, md3dImmediateContext, treeFilenames);
위와 같이 로드를 tree0만 로드 되고 나머지는 되지 않으며 검정색 사각형만(빌보드 사이즈) 덩그러니 보여줍니다.
임시방편으로 tree0을 tree3아래로 로드 순서를 변경하면 나머지도 로드가 되는 듯합니다.
tree0의 사이즈가 다른 tree보다 많이 작은것으로 봐서 압축 형식이 다른 것 같습니다. 이로인해 발생한 문제로 보여집니다.
예전 vs2010에서 돌렸을때는 이런 문제가 없었는데.. 결론은 dds loader의 문제인것같습니다.
이부분에 관하여 아시는분은 관련 내용을 아래에 있는 이메일로 보내주시면 수정하겠습니다.
- BMP파일
일부 필요한 프로젝트에 WICTextureLoader.cpp, h가 프로젝트 common/WICTextureLoader 폴더에 추가.
SelectedCodeSolutions/DepthStencilBolt 프로젝트 에서 bmp파일을 로드하는데 dds로더는 당연히 지원하지 않습니다.
그리하여 WICTextureLoader를 찾아서 Common/WICTextureLoader폴더에 필요한 파일을 넣어두었습니다.
만약 프로젝트에서 사용하시려거든 해당 프로젝트에 WICTextureLoader.h, cpp만 추가하시면 됩니다.
아니면 dds로 변환하여 사용하셔도 됩니다.
d3dUtil.h에 WICTextureLoader.h를 추가 하시려면
WICTextureLoader폴더에 있는 모든 파일을 common폴더로 옮기시고, WICTextureLoader.h를 인클루드 하시면 됩니다.
지금은 폴더로 따로 분리해두었기에 필요한 파일에만 추가해 두었으며 사용법은 관련 해더를 참조하시면 되겠습니다.
이로인한 BoltDemo.cpp 의 변경점은
HR(D3DX11CreateShaderResourceViewFromFile(md3dDevice,
filename.c_str(), 0, 0, &mBoltMapSRV[i], 0 ));
에서
// ID3D11Resource* texResource = nullptr; 이 친구는 위에 선언되어 있기에 생략되었습니다.
HR(CreateWICTextureFromFile(md3dDevice, filename.c_str(), &texResource, &mBoltMapSRV[i]));
ReleaseCOM(texResource); // view saves reference
과 같이 변경됨.
보시다 싶이 DDS 로더와 사용법은 동일합니다.
관련 추가파일 : dds.h, DirectXHelpers.h, LoaderHelpers.h, pch.cpp, pch.h, PlatformHelpers.h, WICTextureLoader.cpp, WICTextureLoader.h
*기타 소스코드 변경사항
- 명시적 형변환
(const float*).. -> XMFLOAT4((const float*) ..) // 명시적 형 변환으로 변경.
Vertex vertices[] =
{
{ XMFLOAT3(-1.0f, -1.0f, -1.0f), (const float*)&Colors::White }, // 왼쪽 에서 아래와 같이 변경.
{ XMFLOAT3(-1.0f, +1.0f, -1.0f), XMFLOAT4((const float*)&Colors::Black) },
{ XMFLOAT3(+1.0f, +1.0f, -1.0f), XMFLOAT4((const float*)&Colors::Red) },
...
};
- xnacollision.h, cpp 관련
DirectXmath, DirectXcollision을 사용함으로서 다음과 같이 변경.
xnacollison.h,cpp 대신 Patch_Chapters.h 로 변경됨. 이는 DirectXmath, DirectXcollision를 사용했으며,
typedef를 사용하여 기존 소스코드는 변경없이 동작.
대부분 정상 동작하는 함수는 기존 xnacollision.cpp에서 그대로 복사.
별도 cpp는 없으며 인라인으로 Patch_Chapters.h에 선언.
- DirectXmath로 인해 변경된 인터페이스.
아래 부분은 작업시 고려 할 것.
- 2장 변경점
ostream& os
CXMMATRIX m
//os << m(i, j) << "\t"; 성능 문제로 삭제 되었다고함.
os << m.r[i].m128_f32[j] << "\t";
- 16장 변경점
XMMATRIX P = mCam.Proj();
// Compute picking ray in view space.
// 2장과 같은 이유로 P(0,0) -> P.r[0].m128_f32[0]
// 2장과 같은 이유로 P(1,1) -> P.r[1].m128_f32[1]
float vx = (+2.0f*sx/mClientWidth - 1.0f)/P.r[0].m128_f32[0];
float vy = (-2.0f*sy/mClientHeight + 1.0f) / P.r[1].m128_f32[1];
- 오타 몇개 수정.
찾아보면 더 있으나, 딱히 실행에 문재가 없으므로 변경 중단.
17,19장 변경
L"Textures/floor.dds", &texResource, &mStoneTexSRV));
에서
mStoneTexSRV -> mFloorTexSRV
*문의사항
progsecu@gmail.com 으로 주시면 알고있는 한도 안에서 답변 드리겠습니다.