Directx11教程36 纹理映射(6)

   本章主要是整理代码,做以下两件事情:

1、把世界坐标矩阵的计算,放在GraphicsClass的渲染函数中,之前放在D3DClass中,而且只是返回一个单位矩阵,没任何作用。如果要使其起作用,就要对每个model类都单独设置,很麻烦,比如我要画两个颜色立方体,岂不是要建立两个model类,而只是世界坐标矩阵不同。

    放在Render函数中后,我们主要通过一些D3D的矩阵变化函数来计算世界坐标系。比如:

    //执行平移操作,得到最终的模型世界矩阵
    D3DXMatrixTranslation(&worldMatrix1, 4.0, 0.0, 0.0);

    就得到一个沿着x轴移动4个单位的世界矩阵。这样,如果要渲染多个cube,我们只需改变世界矩阵,再执行一次shader渲染就可以了。

    比如下面代码,就是画2个颜色立方体:

   // 把模型顶点和索引缓冲放入管线,准备渲染.
    m_Model->Render(m_D3D->GetDeviceContext());
   
  //执行平移操作,得到最终的模型世界矩阵
    D3DXMatrixTranslation(&worldMatrix1, 4.0, 0.0, 0.0);

    // 用shader渲染.
    result = m_ColorShader->Render(m_D3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix1, viewMatrix, projectionMatrix);
    if(!result)
        {
        return false;
        }
  //执行平移操作,得到最终的模型世界矩阵
    D3DXMatrixTranslation(&worldMatrix1, 8.0, 0.0, 0.0);
    // 用shader渲染.
    result = m_ColorShader->Render(m_D3D->GetDeviceContext(), m_Model->GetIndexCount(), worldMatrix1, viewMatrix, projectionMatrix);
    if(!result)
        {
        return false;
        }

运行后界面如下:

image

2、修改PlaneModelClass,之前我们只是画了2个大三角形,现在我们改为网格的方式,这样便于纹理贴图,比如贴上草地的纹理。

 

完整的代码请参考:

工程文件myTutorialD3D11_29

代码下载:

https://files.cnblogs.com/mikewolf2002/d3d1127-28.zip

https://files.cnblogs.com/mikewolf2002/pictures.zip

posted on   迈克老狼2012  阅读(1415)  评论(0编辑  收藏  举报

编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· Vue3状态管理终极指南:Pinia保姆级教程

导航

< 2012年4月 >
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 1 2 3 4 5
6 7 8 9 10 11 12
点击右上角即可分享
微信分享提示