![DirectX11 With Windows SDK--13 动手实现一个简易Effects框架、阴影效果绘制](http://www.likecs.com/default/index/img?u=aHR0cHM6Ly9pbWFnZXMyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTE3MjYwNS8yMDE4MDgvMTE3MjYwNS0yMDE4MDgwNjEwMDMzMDI5MS0xOTg3NjgwOTY0LnBuZw%3D%3D)
第5步:绘制不透明的正常物体
// ************************
// 5. 绘制不透明的正常物体
//
m_BasicEffect.SetRenderDefault(m_pd3dImmediateContext.Get());
for (auto& wall : m_Walls)
wall.Draw(m_pd3dImmediateContext.Get(), m_BasicEffect);
m_Floor.Draw(m_pd3dImmediateContext.Get(), m_BasicEffect);
m_WoodCrate.Draw(m_pd3dImmediateContext.Get(), m_BasicEffect);
![DirectX11 With Windows SDK--13 动手实现一个简易Effects框架、阴影效果绘制](http://www.likecs.com/default/index/img?u=aHR0cHM6Ly9pbWFnZXMyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTE3MjYwNS8yMDE4MDgvMTE3MjYwNS0yMDE4MDgwNjEwMDM1ODkzNy01NDc3MzM3NzcucG5n)
第6步:绘制不透明正常物体的阴影
// ************************
// 6. 绘制不透明正常物体的阴影
//
m_WoodCrate.SetMaterial(m_ShadowMat);
m_BasicEffect.SetShadowState(true); // 反射关闭,阴影开启
m_BasicEffect.SetRenderNoDoubleBlend(m_pd3dImmediateContext.Get(), 0);
m_WoodCrate.Draw(m_pd3dImmediateContext.Get(), m_BasicEffect);
m_BasicEffect.SetShadowState(false); // 阴影关闭
m_WoodCrate.SetMaterial(m_WoodCrateMat);
![DirectX11 With Windows SDK--13 动手实现一个简易Effects框架、阴影效果绘制](http://www.likecs.com/default/index/img?u=aHR0cHM6Ly9pbWFnZXMyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTE3MjYwNS8yMDE4MDgvMTE3MjYwNS0yMDE4MDgwNjEwMDQyMTE4OS0yNTA3MzI4MDkucG5n)
最终绘制效果如下:
![DirectX11 With Windows SDK--13 动手实现一个简易Effects框架、阴影效果绘制](http://www.likecs.com/default/index/img?u=aHR0cHM6Ly9pbWFnZXMyMDE4LmNuYmxvZ3MuY29tL2Jsb2cvMTE3MjYwNS8yMDE4MDgvMTE3MjYwNS0yMDE4MDgwNjEwMDgxNjUxOC0xMjcwNTMxNTM0LnBuZw%3D%3D)
注意该样例只生成点光灯到地板的阴影。你可以用各种摄像机模式来进行测试。
DirectX11 With Windows SDK完整目录
Github项目源码
欢迎加入QQ群: 727623616 可以一起探讨DX11,以及有什么问题也可以在这里汇报。