我为我的图形引擎编写了一个阴影贴图着色器。我遵循了这些教程: 第 1 部分和以下部分。
不幸的是,我得到的结果有点偏离。这里有一些截图。它们显示了我的场景通常的样子,启用了阴影的场景和阴影贴图的内容(请忽略中心的白色东西,这只是鸭子的几何形状)。
这就是我在片段着色器中计算坐标以对阴影贴图进行采样的方式:
float calcShadowFactor(vec4 lightSpacePosition) {
vec3 projCoords = lightSpacePosition.xyz / lightSpacePosition.w;
vec2 uvCoords;
uvCoords.x = 0.5 * projCoords.x + 0.5;
uvCoords.y = 0.5 * projCoords.y + 0.5;
float z = 0.5 * projCoords.z + 0.5;
float depth = texture2D(shadowMapSampler, uvCoords).x;
if (depth < (z + 0.00001f))
return 0.0f;
else
return 1.0f;
}
lightSpacePosition 向量通过以下方式计算:
projectionMatrix * inverseLightTransformationMatrix
* modelTransformationMatrix * vertexPosition
投影矩阵为:
[1.0f / (tan(fieldOfView / 2) * (width / height)), 0.0f, 0.0f, 0.0f]
[0.0f, 1.0f / (tan(fieldOfView / 2), 0.0f, 0.0f]
[0.0f, 0.0f, (-zNear - zFar) / (zNear - zFar), 2.0f * zFar * zNear / (zNear - zFar)]
[0.0f, 0.0f, 1.0f, 0.0f]
我的阴影贴图似乎没问题,我确保渲染通道使用与我的阴影贴图通道相同的 lightSpacePosition 向量。但我不知道出了什么问题。