最近在學習DirectX3D,目前的學習路線是龍書+X_jun同學的博客:https://blog.csdn.net/x_jun96/category_8596621.html
接下去整理一下博客中每一節的課後習題,如果解答有問題,請各位同學批評指正。
共勉!(#^.^#)
注:有些問題博主也沒有解決,逐漸完善中。。。
———————————————
一、源代碼運行效果:
二、題目
1.嘗試只用5個頂點繪製四棱錐
//頂點數組
// 設置四棱錐頂點
VertexPosColor vertices[] =
{
{ XMFLOAT3(-1.0f, 0.0f, -1.0f), XMFLOAT4(0.0f, 1.0f, 0.0f, 1.0f) },
{ XMFLOAT3(-1.0f, 0.0f, 1.0f), XMFLOAT4(1.0f, 0.0f, 0.0f, 1.0f) },
{ XMFLOAT3(1.0f, 0.0f, 1.0f), XMFLOAT4(1.0f, 1.0f, 0.0f, 1.0f) },
{ XMFLOAT3(1.0f, 0.0f, -1.0f), XMFLOAT4(0.0f, 1.0f, 0.0f, 1.0f) },
{ XMFLOAT3(0.0f, 2.0f, 0.0f), XMFLOAT4(0.0f, 0.0f, 1.0f, 1.0f) },
};
索引數組:
//四棱錐
DWORD indices[] = {
// 左面
0, 1, 4,
// 後面
2, 4, 1,
// 右面
4, 2 ,3,
// 前面
0, 4, 3,
// 下面
0, 3, 1,
1, 3, 2,
};
最終效果:
2.嘗試將四棱錐、立方體的頂點數據放在同一個頂點緩衝區,索引數據也放在同一個索引緩衝區,然後使用這兩個緩衝區來繪製出這兩個物體(讓四棱錐在左邊,立方體在右邊,可以修改頂點數據,也可以使用變換矩陣)
修改頂點數組:
//設置合併的頂點數組
VertexPosColor vertices[] =
{
{ XMFLOAT3(-4.0f, -1.0f, -1.0f), XMFLOAT4(0.0f, 0.0f, 0.0f, 1.0f) },
{ XMFLOAT3(-4.0f, 1.0f, -1.0f), XMFLOAT4(1.0f, 0.0f, 0.0f, 1.0f) },
{ XMFLOAT3(-2.0f, 1.0f, -1.0f), XMFLOAT4(1.0f, 1.0f, 0.0f, 1.0f) },
{ XMFLOAT3(-2.0f, -1.0f, -1.0f), XMFLOAT4(0.0f, 1.0f, 0.0f, 1.0f) },
{ XMFLOAT3(-4.0f, -1.0f, 1.0f), XMFLOAT4(0.0f, 0.0f, 1.0f, 1.0f) },
{ XMFLOAT3(-4.0f, 1.0f, 1.0f), XMFLOAT4(1.0f, 0.0f, 1.0f, 1.0f) },
{ XMFLOAT3(-2.0f, 1.0f, 1.0f), XMFLOAT4(1.0f, 1.0f, 1.0f, 1.0f) },
{ XMFLOAT3(-2.0f, -1.0f, 1.0f), XMFLOAT4(0.0f, 1.0f, 1.0f, 1.0f) },
{ XMFLOAT3(2.0f, 0.0f, -1.0f), XMFLOAT4(0.0f, 1.0f, 0.0f, 1.0f) },
{ XMFLOAT3(2.0f, 0.0f, 1.0f), XMFLOAT4(1.0f, 0.0f, 0.0f, 1.0f) },
{ XMFLOAT3(4.0f, 0.0f, 1.0f), XMFLOAT4(1.0f, 1.0f, 0.0f, 1.0f) },
{ XMFLOAT3(4.0f, 0.0f, -1.0f), XMFLOAT4(0.0f, 1.0f, 0.0f, 1.0f) },
{ XMFLOAT3(2.0f, 2.0f, 0.0f), XMFLOAT4(0.0f, 0.0f, 1.0f, 1.0f) },
};
修改索引數組:
//合併的索引數組
DWORD indices[] = {
/*正方體索引*/
// 正面
0, 1, 2,
2, 3, 0,
// 左面
4, 5, 1,
1, 0, 4,
// 頂面
1, 5, 6,
6, 2, 1,
// 背面
7, 6, 5,
5, 4, 7,
// 右面
3, 2, 6,
6, 7, 3,
// 底面
4, 0, 3,
3, 7, 4,
/*四棱錐索引*/
//左面
0, 1, 4,
// 後面
2, 4, 1,
// 右面
4, 2 ,3,
// 前面
0, 4, 3,
// 下面
0, 3, 1,
1, 3, 2,
};
修改DrawIndex代碼:
龍書關於這部分的講解:
效果圖:
3.嘗試創建動態頂點緩衝區,然後通過Map和Unmap的方式給頂點緩衝區寫入頂點數據。
尚未解決。。。