graphics - 阴影贴图问题
问题描述
我已经实现了阴影映射以在地形上生成阴影。我从灯光的角度渲染场景(或投射阴影的对象),然后生成要在第二次渲染过程中采样的深度图(正如网络上的所有教程所解释的那样)。它似乎工作正常,但后来我注意到山上的物体投射了不止一个阴影:
我认为这是正确的行为,因为我在生成深度图期间不渲染地形(右上角的小四边形显示了第一次渲染过程中的深度缓冲区),所以更多的地形片段看起来像是在物体后面光的观点。不过,似乎没有关于阴影贴图的教程提到这个问题。我是否遗漏了某些东西,或者这种阴影生成技术非常基本,并且可能会出现这样的问题?
编辑
这是我的渲染代码:
// in my Render() method:
mShadowRenderer.SetLight(*mLights[0]);
mShadowRenderer.Render();
RenderSkyBox();
RenderEntities();
RenderGeometryTerrain(mTerrains[0],
mShadowRenderer.GetLightViewProjectionMatrix());
shadowRenderer 是一个负责渲染到屏幕外缓冲区并将深度图作为着色器资源视图返回的类。当我调用渲染方法时,深度图被添加到地形中,因此可以在地形像素着色器中对其进行采样以生成阴影。
解决方案
另外,地形需要渲染到阴影贴图/深度贴图
推荐阅读
- c# - 在ac#程序中,有没有办法打开file.txt,而不使用整个文件路径
- c - 如何计算c中每个字符串的单词和句子数?
- algorithm - 基于法线和中心位置修复网格中翻转面的算法
- laravel - 使用预编译文件在 Docker 容器之间共享文件夹
- python - 向 Jupyter 笔记本函数文档字符串添加输入
- c++ - 为什么 GCC 使用 std::vsnprintf 实现 std::to_string?
- mysql - MySQL 在运行时更新表的空值
- jestjs - 带有 jest.config.js 的 Jest cli testPathIgnorePatterns 导致未找到测试
- c# - 在一个线程上串行运行任务
- sqlite - 检索 sqlite 表中的出现次数