0

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

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

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

4

1 回答 1

2

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

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

vec4 positiontotexture = gl_ModelViewMartix*gl_Vertex;

在第二遍中,您可以使用:

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

前一种方法很简单(但在学习时很好),但需要大量内存(你必须存储 3 个元素向量)。更好的方法是从屏幕位置/深度重新创建视图位置:链接到文章。这种技术用于现代发动机。(感谢andon-m-coleman的建议)

这是我的一些基本延迟的回购:https ://github.com/fenbf/efg_deferred/tree/master/code/shaders

于 2013-08-28T18:39:18.687 回答