0

我正在尝试进行一种光烘焙。这个想法是在预通道中将光“烘焙”到纹理中”,以便在主通道中使用的纹理已经被着色。我这样做:

  1. 使用输入纹理的大小创建 FBO 和纹理附件。
  2. 绑定输入纹理并渲染到全屏四边形。
  3. 为我的 3d 网格使用输出纹理(将光线烘焙到其中)。

目前它不起作用。结果是黑色的。我想这与片段坐标与使用模型视图投影矩阵转换顶点时的预期不同(在我的情况下我输出归一化顶点坐标)。

这是我的顶点着色器:

#version 420 core

layout(location = 0)  in vec4 position;//vertices are in range [-1,1]
layout(location = 1)  in vec2 uvs;
layout(location = 2)  in vec3 normal;

uniform mat4 MODEL_VIEW_MATRIX;
noperspective out vec2 vTexcoord;
out  vec3 Position;
out smooth vec3 Normal;
out gl_PerVertex
{
vec4 gl_Position;
};


void main() {
 vTexcoord = position.xy * 0.5  + 0.5;
 Normal = vec3(normalize(MODEL_VIEW_MATRIX * vec4(normal,0)));
 Position = vec3(MODEL_VIEW_MATRIX * position);
gl_Position = vec4( position.xy ,0.0 , 1.0 ); 
}

片段着色器:

 void main() {
 ivec2 tsize = textureSize(COLOR_MAP_0, 0); 
vec2 texcoord = gl_FragCoord.xy * (1.0 / vec2(tsize));    
fResult = texture(COLOR_MAP_0  , texcoord) ;
fResult.rgb *=   pointlightType(0 , Position , Normal);// typical point light algo
 }

我在这里想念什么?在我的情况下深度缓冲区也不可用。

更新:

我解决了。问题是一些制服没有传递给着色器。由于在我的例子中源纹理和目标纹理具有相同的尺寸,因此实现是微不足道的。

4

0 回答 0