延迟渲染位置重建

vd8tlhqk  于 2022-09-26  发布在  其他
关注(0)|答案(1)|浏览(138)

我做了延迟渲染的第一步,用颜色、法线、位置和深度纹理的FBO。但当我做照明时,位置会随我一起移动和旋转。

第一个过程顶点:

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

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

cotxawn7

cotxawn71#

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

在执行第一遍操作时,最好是使用查看位置,而不是查看投影。您可以使用:

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

相关问题