我正在尝试做一种轻微的烘烤。想法是在预先通过中“将”光“烘焙”到纹理中“这样在主要传递中使用的纹理已经被遮蔽。我这样做这样:
目前它不起作用。结果是黑色的。我想它与碎片坐标不同于顶点用模型 - 视图 - 投影矩阵变换时的预期有关(在我的例子中我是立即输出标准化的顶点坐标。)
这是我的顶点着色器:
#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
}
我在这里想念什么?在我的情况下,深度缓冲区不可用。
更新
我解决了。问题是一些制服没有传递给着色器。由于我的情况下源和目标纹理具有相同的尺寸,因此实现起来很简单。