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