我尝试在 OpenGL 中使用 FBO 创建一个 2 通道效果。
在第一遍中,我将深度写入颜色缓冲区(图 1):
在其顶点着色器中使用以下内容:
gl_Position = projection * view * gl_Vertex;
vec4 position = gl_Position/gl_Position.w;
position = position / 2.0 + 0.5;
float temp_depth = position.z;
gl_FrontColor = vec4(temp_depth,temp_depth,temp_depth,1);
在第二遍中,我尝试使用上一遍中的纹理并为场景着色(图 2):
这是顶点着色器中的代码:
vec4 shadow_coord = projection * view * gl_Vertex;
shadow_coord = shadow_coord / shadow_coord.w;
shadow_coord = shadow_coord / 2.0 + 0.5;
gl_FrontColor = texture2D(light_depth_texture, shadow_coord.xy);
场景由圆锥体前面的四边形组成。在这两种情况下,片段着色器都是。两种情况下gl_FragColor = gl_Color;
的视图和投影矩阵在开始时定义的完全相同。问题是 shadow_coord.xy 存在偏差。
只要视图和投影值完全相同,我不应该得到相同的结果吗?
我能做些什么来修复它?