分层渲染阴影立方体贴图

时间:2015-01-27 01:08:28

标签: c++ opengl shadow-mapping

我正在尝试使用分层渲染一次渲染阴影立方体贴图。

我试图尽可能彻底:

  • 我使用glFramebufferTexture绑定了立方体贴图深度附件(GL_DEPTH_ATTACHMENT_32F)和颜色附件0(GL_R32F)
  • 我确保在纹理附加到FBO后检查帧缓冲的完整性 - 它是否完整
  • 我已尝试使用“layout(triangles,invocations = 6)in”中的几何着色器实例化;没有(求助于(int layer = 0; layer< 6; ++ layer)循环,设置gl_Layer = l,首先为每个基元设置,然后为每个顶点设置)

长话短说,第一层(即本例中的X +)会被渲染,但其他任何一层都没有,无论是深度还是颜色附件。

关于分层渲染的文档看起来很稀疏,即使红皮书最多只花了半页...无论如何:

代码:

  • 着色器:

    • 顶点:

      #version 440 core
      
      layout(location = 0) in vec3 attrPosition;
      
      void main()
      {
          gl_Position = vec4(attrPosition, 1.0);
      }
      
    • 几何:

      #version 440 core
      
      layout(triangles,      invocations = 6)   in;
      layout(triangle_strip, max_vertices = 18) out;
      
      uniform mat4 dkModelMatrix;
      uniform mat4 dkViewMatrices[6];
      uniform mat4 dkProjectionMatrix;
      
      void main()
      {
          gl_Layer    = gl_InvocationID;
          for(int i = 0; i < 3; ++i)
          {
              gl_Layer    = gl_InvocationID;
              gl_Position = dkProjectionMatrix * dkViewMatrices[gl_InvocationID] * dkModelMatrix * gl_in[i].gl_Position;
              EmitVertex();
          }
      
          EndPrimitive();
      }
      
    • 片段:

      #version 440 core
      
      layout(location = 0) out vec4 dkFragCoord;
      
      void main()
      {
          dkFragCoord = vec4( vec3(float(gl_Layer) * 0.1 + 0.5) , 1.0);
      }
      
  • C ++(主要是使用我的引擎类,它实际上是最小的,并且已经过测试,对于FBO,使用2D(点)阴影贴图):

0 个答案:

没有答案