我做了延迟渲染的第一步,用颜色、法线、位置和深度纹理的FBO。但当我做照明时,位置会随我一起移动和旋转。
第一个过程顶点:
void main(){ gl_Position=gl_ModelViewProjectionMatrix*gl_Vertex; vec4 positiontotexture = gl_ModelViewProjectionMartix*gl_Vertex; }
那么我怎么才能得到原来的职位呢?
cotxawn71#
我假设positiontotexture将转到碎片着色器,然后保存在纹理中。
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
1条答案
按热度按时间cotxawn71#
我假设
positiontotexture
将转到碎片着色器,然后保存在纹理中。在执行第一遍操作时,最好是使用查看位置,而不是查看投影。您可以使用:
在第二个过程中,您可以使用:
前面的方法很简单(但在学习时很好),但需要大量的内存(您必须存储3个元素的向量)。更好的方法是从屏幕位置/深度:link to article重新创建视图位置。这种技术被用于现代发动机中。(感谢andon-m-coleman的建议)
这是我的回购,但有一些基本的延期:https://github.com/fenbf/efg_deferred/tree/master/code/shaders