我做了第一步延迟渲染,fbo机智颜色、法线、位置和深度纹理。但是当我做照明时,位置会随着我移动和旋转。第一次通过顶点:
void main(){
gl_Position=gl_ModelViewProjectionMatrix*gl_Vertex;
vec4 positiontotexture = gl_ModelViewProjectionMartix*gl_Vertex;
}
那么我怎样才能得到原来的位置呢?
我做了第一步延迟渲染,fbo机智颜色、法线、位置和深度纹理。但是当我做照明时,位置会随着我移动和旋转。第一次通过顶点:
void main(){
gl_Position=gl_ModelViewProjectionMatrix*gl_Vertex;
vec4 positiontotexture = gl_ModelViewProjectionMartix*gl_Vertex;
}
那么我怎样才能得到原来的位置呢?
我假设这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