相关疑难解决方法(0)

OpenGL阴影peter-panning

我通过两个绘制过程向一个场景添加阴影,一个是深度图,另一个是普通帧缓冲.

使用深度图时不使用偏差,会有很多阴影痤疮.

阴影痤疮没有偏见

通过向深度图检查添加偏差来解决此问题.

阴影与偏见

但是,当光线移动到不同的角度时,这会导致阴影从对象"分离".

彼得平移

我相信这种效应被称为peter-panning,是由于不同角度使用更大的偏差造成的.

通常的解决方法似乎是在绘制阴影贴图时剔除三角形,但是由于地板平面是2D对象,我不相信这会正常工作.

我正在使用的实际地形是程序生成的,因此创建它的3D版本并不像在这个简单示例中那样简单.

如何将peter-panning固定在这样的2D物体上?


顶点着色器

#version 400

layout(location = 0) in vec3 position;
layout(location = 1) in vec3 normal;
layout(location = 2) in vec2 texture_coords;

out VS_OUT {
    vec4 position;
    vec3 normal;
    vec2 texture_coords;
    vec4 shadow_position;
} vs_out;

uniform mat4 model;
uniform mat4 model_view;
uniform mat4 model_view_perspective;
uniform mat3 normal_matrix;
uniform mat4 depth_matrix;

void main() {
    vec4 position_v4 = vec4(position, 1.0);

    vs_out.position = model_view * position_v4;
    vs_out.normal = normal_matrix * normal;
    vs_out.texture_coords = texture_coords;
    vs_out.shadow_position = …
Run Code Online (Sandbox Code Playgroud)

c++ opengl glsl shadow

6
推荐指数
1
解决办法
1565
查看次数

标签 统计

c++ ×1

glsl ×1

opengl ×1

shadow ×1