GLSL中纹理空间中的浅阴影

时间:2013-08-15 10:11:39

标签: opengl glsl

我正在尝试做一种轻微的烘烤。想法是在预先通过中“将”光“烘焙”到纹理中“这样在主要传递中使用的纹理已经被遮蔽。我这样做这样:

  1. 使用输入纹理的大小创建FBO和纹理附件。
  2. 将输入纹理绑定并渲染到全屏四边形。
  3. 使用输出纹理(将光线烘烤到其中)用于我的3d网格。
  4. 目前它不起作用。结果是黑色的。我想它与碎片坐标不同于顶点用模型 - 视图 - 投影矩阵变换时的预期有关(在我的例子中我是立即输出标准化的顶点坐标。)

    这是我的顶点着色器:

    #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
     }
    

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

    更新

    我解决了。问题是一些制服没有传递给着色器。由于我的情况下源和目标纹理具有相同的尺寸,因此实现起来很简单。

0 个答案:

没有答案