本章主要是整理代码, 做以下两件事情:
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;
- }
运行后界面如下:
2, 修改 PlaneModelClass, 之前我们只是画了 2 个大三角形, 现在我们改为网格的方式, 这样便于纹理贴图, 比如贴上草地的纹理.
完整的代码请参考:
工程文件 myTutorialD3D11_29
代码下载:
http://files.cnblogs.com/mikewolf2002/pictures.zip
来源: http://www.bubuko.com/infodetail-3048293.html