Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 推迟讨论的问题_C++_Opengl_Deferred Shading - Fatal编程技术网

C++ 推迟讨论的问题

C++ 推迟讨论的问题,c++,opengl,deferred-shading,C++,Opengl,Deferred Shading,我只是有一些关于延迟着色的问题。我已经到了可以从多个渲染目标获得颜色、位置、法线和纹理的地步。我的问题与我下一步做什么有关。为了确保从纹理中获得正确的数据,我在屏幕上放置了一个平面,并将纹理渲染到该平面上。我不明白的是如何操纵这些纹理,以便最终输出使用灯光进行着色。我是否需要渲染占据屏幕的平面或四边形,并将所有计算应用于该平面?如果我这样做,我会有点困惑,我如何才能让多个灯光以这种方式工作,因为“平面”将是一个可渲染对象,因此对于每个灯光,我需要重新渲染平面。我想得不对吗?您需要渲染一些几何体来

我只是有一些关于延迟着色的问题。我已经到了可以从多个渲染目标获得颜色、位置、法线和纹理的地步。我的问题与我下一步做什么有关。为了确保从纹理中获得正确的数据,我在屏幕上放置了一个平面,并将纹理渲染到该平面上。我不明白的是如何操纵这些纹理,以便最终输出使用灯光进行着色。我是否需要渲染占据屏幕的平面或四边形,并将所有计算应用于该平面?如果我这样做,我会有点困惑,我如何才能让多个灯光以这种方式工作,因为“平面”将是一个可渲染对象,因此对于每个灯光,我需要重新渲染平面。我想得不对吗?

您需要渲染一些几何体来表示灯光覆盖的区域。灯光的每个像素的照明项累积到目标渲染目标中。这将为您提供lit结果

有多种方法可以做到这一点。要启动并运行,一个简单/容易(而且速度非常慢)的方法是为每个灯光渲染一个全屏四元

基本上:

  • 设置:将所有对象渲染到g缓冲区中,存储各种对象属性(反照率、镜面反射、法线、, 深度,无论你需要什么)
  • 照明:对于每个灯光:
    • 渲染一些几何体以表示灯光将在屏幕上覆盖的区域
    • 为计算照明贡献所需的数据采样g缓冲区(可以使用vpos寄存器查找uv)
    • 将照明项累积到目标渲染目标中(对于简单的情况,backbuffer可以很好地执行此操作)
一旦这项工作开始,就会有很多不同的方法来加速(剪刀式矩形、紧密绑定灯光的网格、避免阴影“浮动”区域的模板测试、一次绘制多个灯光以及更高级别的技术,如平铺)


这些天来,延迟着色有很多不同的倾斜,但这里完全介绍了原始技术:

我刚刚想到了这一点,我是否要制作最终纹理并对该纹理进行所有计算?有道理…嗯,我会试试的谢谢!我会接受这个答案。我问这个问题主要是因为我似乎无法使最终的渲染工作,我想知道我是否误解了如何达到这一点。当我试图渲染我的点光源并从中计算数据时,我发现我只是绑定了错误的顶点数据。谢天谢地,我找到了它,可以继续这样做。我真不敢相信我在画图之前没有绑定顶点数组