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;
}
运行后界面如下:
2、修改PlaneModelClass,之前我们只是画了2个大三角形,现在我们改为网格的方式,这样便于纹理贴图,比如贴上草地的纹理。
完整的代码请参考:
工程文件myTutorialD3D11_29
代码下载:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于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保姆级教程