zoukankan      html  css  js  c++  java
  • 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

  • 相关阅读:
    用命令行工具安装 卸载 设置 .Net服务
    oracle imp 数据时实现插入到表中 不覆盖
    Oracle导出 Exp的使用
    Linux下的tar压缩解压缩命令详解
    设计模式 配置器
    设计模式 概括说明
    设计模式 创建型模式
    设计模式 组成 & 装饰 & 外观
    设计模式 单件 & 原型
    设计模式 享元 & 代理
  • 原文地址:https://www.cnblogs.com/mikewolf2002/p/2445883.html
Copyright © 2011-2022 走看看