DirectX11 With Windows SDK 2-4章的课后作业

本文是DirectX11 With Windows SDK 2-4章的课后作业
答案仅供参考

02 顶点/像素着色器的创建、顶点缓冲区

原文链接: DirectX11 With Windows SDK--02 顶点/像素着色器的创建、顶点缓冲区

  1. 尝试交换三角形第一个和第三个顶点的数据,屏幕将显示什么?为什么?

    会消失, 因为三角形的背面朝向摄像机,不会被画出来

  2. 尝试用6个顶点绘制矩形表面

    具体查看文章评论区

  3. 尝试用4个顶点绘制矩形表面 (提示:D3D11_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP)

     VertexPosColor vertices[] =
     {
         //4p->Rectangle
         { XMFLOAT3(0.0f, 0.5f, 0.0f), XMFLOAT4(0.0f, 1.0f, 0.0f, 1.0f) },
         { XMFLOAT3(0.5f, 0.0f, 0.0f), XMFLOAT4(0.0f, 0.0f, 1.0f, 1.0f) },
         { XMFLOAT3(-0.5f, 0.0f, 0.0f), XMFLOAT4(1.0f, 0.0f, 0.0f, 1.0f) },
         { XMFLOAT3(0.0f, -0.5f, 0.0f), XMFLOAT4(0.0f, 0.0f, 1.0f, 1.0f) },
     };
     m_pd3dImmediateContext->IASetPrimitiveTopology(D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST);
     //更改为
     m_pd3dImmediateContext->IASetPrimitiveTopology(D3D_PRIMITIVE_TOPOLOGY_TRIANGLESTRIP);

03 索引缓冲区、常量缓冲区

原文链接:DirectX11 With Windows SDK--03 索引缓冲区、常量缓冲区

  1. 尝试只用5个顶点绘制四棱锥

    详情见评论区

  2. 尝试将四棱锥、立方体的顶点数据放在同一个顶点缓冲区,索引数据也放在同一个索引缓冲区,然后使用这两个缓冲区来绘制出这两个物体(让四棱锥在左边,立方体在右边,可以修改顶点数据,也可以使用变换矩阵)

    详情见评论区

  3. 尝试创建动态顶点缓冲区,然后通过Map和Unmap的方式给顶点缓冲区写入顶点数据。

     //1. 找到 顶点缓冲区描述 部分内容修改如下
     vbd.Usage = D3D11_USAGE_DYNAMIC;
     vbd.CPUAccessFlags = D3D11_CPU_ACCESS_WRITE;
     // 2.动态更新时可使用如下代码
     //vertices 为顶点信息
     D3D11_MAPPED_SUBRESOURCE mappedData;
     HR(m_pd3dImmediateContext->Map(m_pVertexBuffer.Get(), 0, D3D11_MAP_WRITE_DISCARD, 0, &mappedData));
     memcpy_s(mappedData.pData, sizeof(vertices),&vertices, sizeof(vertices));
     m_pd3dImmediateContext->Unmap(m_pVertexBuffer.Get(), 0);

04 变换

原文链接:DirectX11 With Windows SDK--04 变换

  1. 修改项目03,在窗口被拉伸的情况下修改透视投影矩阵的宽高比保证物体正常显示。

    这里窗口被拉伸显示不正常的原因是因为我们在初始化proj矩阵时采用的是当时的AspectRatio 我们在窗口变化的时候要动态的修改,在UpdateScene 函数中 在更新常量缓存时添加一行代码 代码如下

     m_CBuffer.proj = XMMatrixTranspose(XMMatrixPerspectiveFovLH(XM_PIDIV2, AspectRatio(), 1.0f, 10000.0f));
  2. 修改项目03,让摄像机位于点(1, 0, -2)观察原点,并使用正交投影观察效果
    修改如下代码
     m_CBuffer.view = XMMatrixTranspose(XMMatrixLookAtLH(
     XMVectorSet(1.0f, 0.0f, -2.0f, 0.0f),
     XMVectorSet(0.0f, 0.0f, 0.0f, 0.0f),
     XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f)
     ));
     m_CBuffer.proj = XMMatrixTranspose(XMMatrixOrthographicLH(10, 10, 1.0f, 10000.0f));
     //其中 XMMatrixOrthographicLH是正交矩阵参数如下
     XMMatrixOrthographicLH(
     float ViewWidth,  // 待投影区域的宽度 
     float ViewHeight, // 高
     float NearZ,      // ***面
     float FarZ        // 远平面
     )
  3. 修改项目03,让立方体中心位于点(3, 0, 0),然后立方体按Z轴绕原点逆时针旋转,同时它也按Z轴绕立方体中心顺时针旋转,速度自拟。

    把步骤拆为3步
    1.Z轴自转
    2.移动到(3,0,0)位置
    3.绕原点Z轴旋转
    代码如下

    //UpdateScene函数中添加
    XMMATRIX m = {
      XMVectorSet(1.0f, 0.0f, 0.0f, 0.0f),
      XMVectorSet(0.0f, 1.0f, 0.0f, 0.0f),
      XMVectorSet(0.0f, 0.0f, 1.0f, 0.0f),
      XMVectorSet(3.0f, 0.0f, 0.0f, 1.0f),
    }; // 平移的矩阵 需要转置
    XMVECTOR Z = { 0.0f,0.0f,1.0f };
    XMMATRIX rotation = XMMatrixRotationAxis(Z,-phi);// 构建旋转矩阵
    m_CBuffer.world = XMMatrixTranspose(rotation * m * XMMatrixRotationZ(theta));
    //先自传,然后平移,之后绕原点转
图形学碎碎念 文章被收录于专栏

学习图形学

全部评论

相关推荐

2025-12-27 18:11
已编辑
门头沟学院 前端工程师
28双非鼠鼠第一份实习,感谢金山,感谢面试官张先生的赏识,也感谢自己很开心很开心(有没有待过的前辈,求摸鱼技巧bushi)timeline12.15 投递12.16 约面12.18 一面 半个小时后约二面12.19 二面,口头oc12.24 发offer一面1. 开发页面中使用的布局方式2. flex: 1 是什么的缩写3. 水平居中的方法4. tailwindcss 的优势5. js 的闭包6. 打印结果的题,解释为什么(var 定义 i ,setTimeout 执行打印),使用 let 的打印结果7. 箭头函数和普通函数的区别8. promise 构造函数是同步还是异步9. 内存泄漏的情况10. interface 和 type 的区别11. react 的 key 作用12. 常用的钩子函数13. 怎么避免不必要的渲染14. useeffect 的使用场景15. react 和 vue 怎么选择16. vue 的 data 为什么用函数17. tcp 为什么需要三次握手和四次挥手18. vite 为什么比较快19. 解释防抖节流和手写防抖函数,还有实现思路20. 深浅拷贝的区别和手写深拷贝,讲实现思路反问了业务,反馈时间和学习建议二面基本上是围绕项目展开,根据项目的每一项,来给场景题问你会怎么做,跟基础相关的东西如下:1. 虚拟列表的实现和原理2. zustand 和 context 的区别3. vitest 相关,写测试的话应该怎么做些什么?4. monorepo的细节问题5. 做项目的动机6. 事件委托和时间冒泡的区别有个点顺着问了我五个问题实在是答不下去了就是说感觉金山云这边面试虽然一面全是八股,但是二面还是要好好准备项目,做到能被深挖那么两三个问题的程度,鼠鼠也是运气很好,问的都是准备过的嘻嘻面试完之后还很期待这个面试官会不会是我mt或者ld,会很认真的听我说话,然后告诉我哪里有小问题,不知道是不是鼠鼠的错觉,感觉他看后辈的眼神都是带有欣赏的意味真的很复合我对mt/ld的幻想(bushi),但是后来发现他ip是北京的qwq有点点小失落,不过没关系,看隔壁某书感觉金山的节奏还挺慢的期待入职ing愿一切顺利,好运常伴吾身这里再吐槽一下流程,怎么!!这么!!慢!!急死我了急死我了!!鬼知道我从周一到接到offer这段时间有多煎熬,哎呀但是但是好在一切如愿
发面经攒人品
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务