【发布时间】:2014-02-12 23:16:50
【问题描述】:
我目前正在尝试扩展我当前的基本阴影映射系统,以允许对象从多个灯光投射阴影。目前我已经正确生成了两个阴影贴图,但问题是让它们都在场景中渲染。
我的绘图功能目前是这样的:
for (int iLight = 0; iLight < mNumLights; iLight++)
{
mShadowMap[iLight]->SetNullRenderTarget(md3dImmediateContext);
DrawSceneToShadowMap(iLight);
RestoreRenderTarget();
SetShadowMap(iLight);
SetShadowTransform(iLight);
DrawScene();
}
mSwapChain->Present(0, 0)
仅使用和绘制第二张阴影贴图,我在这里缺少什么?
【问题讨论】:
-
我猜你正在用第二个 DrawScene 覆盖你第一次绘制的场景。你需要某种阴影贴图的组合。您可以将它们都设置在场景的着色器中并将它们组合在着色器中(更快,因为您只将场景绘制到后缓冲区一次),或者您可以尝试在第一个场景上将第二个 drawcall 与 Min-BlendFunction 混合(更简单,但更慢)
-
感谢回复,我正在尝试先实现混合方法。我已将混合操作设置为 MIN,但是源和目标混合以及 Alpha 设置呢?
-
他们应该是一个,因为如果你想象你的两个场景,你想总是取较暗的值,应该有阴影。请记住,仅在第二次阴影迭代时才开始应用混合函数。第一次迭代应该正常渲染到后台缓冲区。
-
得到一些奇怪的效果......场景中的立方体刚刚变得透明。如果您想看一下,这是我正在使用的代码,无论如何我感谢所有帮助:) pastebin.com/U2CmqcGA
标签: c++ directx shadow directx-11