學習X_Jun的D3D教程:03索引緩衝區、常量緩衝區課後習題

最近在學習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的方式給頂點緩衝區寫入頂點數據。
尚未解決。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章