学习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的方式给顶点缓冲区写入顶点数据。
尚未解决。。。

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