阴影映射 - 多个来源

时间:2011-01-03 01:55:00

标签: c++11 direct3d shadows

我正在寻找在DX9中编写一些执行阴影贴图的代码。我只有一个光源的阴影贴图的示例代码。来自多个光源的阴影贴图是否可行?我的场景非常轻,无法渲染 - 没有纹理,只有几百或几千个顶点。

麻烦的是我的场景发生在靠近太阳的太空中。我打算将太阳创建为一个球体,并将每个顶点渲染为光源 - 这也会对各种科幻太空船效应产生一些好的效果。但仔细阅读代码,我非常担心这会破坏我的表现,而且我并不完全确定它会产生我正在寻找的令人难以置信的灯光效果。我只是在这里过度杀戮吗?

3 个答案:

答案 0 :(得分:1)

渲染每个投射阴影的多个灯光的简单方法是------>

对于循环中的每个灯光执行以下操作::

{

清除Offscreen RenderTarget黑色。

使用当前灯光渲染场景...在Offscreen RenderTarget上。

然后打开混合(添加,一对一),将Offscreen RenderTarget绘制/覆盖到主后备缓冲区上。

}

渲染完所有灯光后,显示场景。因为光最后只是添加,你可以随意渲染尽可能多的灯光。 无论您是否使用不同的照明,此方法都将起作用。您还可以为每个灯打开或关闭阴影。

如果其中任何一个不清楚&需要更好的解释让我知道...

答案 1 :(得分:0)

如果您一直在寻找“高级”效果/技术的DX或OGL代码,请查看Humus 3D阴影贴图的一些示例,其中一个应该有多个源。此外,{3}的GPU Gems 3也可能会引起人们的兴趣。

答案 2 :(得分:0)

TBH,你只是过度使用。来自大球体中每个顶点的光源太多了。如果您在获得阴影上的柔化边缘之后,那么通常会更好地查看soft shadowing

举个例子半衰期2通过将阴影贴图渲染成一个单独的渲染缓冲区(同时使用主渲染缓冲区中的Z缓冲区)来实现软阴影。然后模糊缓冲区并将其重新应用到主渲染缓冲区。结果是很漂亮的阴影......