延迟渲染位置重建

时间:2013-08-28 14:24:46

标签: opengl glsl lwjgl deferred-rendering

我做了延迟渲染的第一步,fbo机智颜色,法线,位置和深度纹理。但是当我做照明时,位置正随着我移动和旋转。 第一次传递顶点:

void main(){
    gl_Position=gl_ModelViewProjectionMatrix*gl_Vertex;
    vec4 positiontotexture = gl_ModelViewProjectionMartix*gl_Vertex;
}

那么我怎样才能获得原来的位置?

1 个答案:

答案 0 :(得分:2)

我假设positiontotexture将转到片段着色器,然后保存在纹理中。

第一次通过时,最好有View位置,而不是ViewProjection。您可以使用:

vec4 positiontotexture = gl_ModelViewMartix*gl_Vertex;

在第二遍中你可以使用:

vec3 position = texture(texPos, vVaryingTexCoord0.xy).rgb;

以前的方法非常简单(但学习时很好)但需要大量内存(你必须存储3个元素向量)。 更好的方法是从屏幕位置/深度重新创建视图位置:link to article。 这种技术用于现代发动机中。 (感谢andon-m-coleman提出建议)

以下是我的回购文章,其中包含一些基本的延迟:https://github.com/fenbf/efg_deferred/tree/master/code/shaders