Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/opengl/4.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
Opengl 如何在片段着色器中自动添加向量_Opengl_Glsl - Fatal编程技术网

Opengl 如何在片段着色器中自动添加向量

Opengl 如何在片段着色器中自动添加向量,opengl,glsl,Opengl,Glsl,我需要我的片段着色器调用以原子方式向一些图像添加向量,因为更多片段可以访问相同的texel 所以我的问题是,最好的方法是什么 每个片段应添加两个向量,一个向量应具有16位分量,另一个向量应具有8位分量 我想过一个旋转锁,但我尝试使用的每一个旋转锁都崩溃了 另一个选项是将带有packSnorm2x16/4x8的数据打包到atomicAdd的3个R32UI纹理中,第一个纹理包含16位向量的xy,第二个纹理包含16位向量的z,第三个纹理包含整个8位向量(packSnorm4x8),但问题是总和将超过1

我需要我的片段着色器调用以原子方式向一些图像添加向量,因为更多片段可以访问相同的texel

所以我的问题是,最好的方法是什么

每个片段应添加两个向量,一个向量应具有16位分量,另一个向量应具有8位分量

我想过一个旋转锁,但我尝试使用的每一个旋转锁都崩溃了


另一个选项是将带有
packSnorm2x16/4x8
的数据打包到
atomicAdd
的3个
R32UI
纹理中,第一个纹理包含16位向量的
xy
,第二个纹理包含16位向量的
z
,第三个纹理包含整个8位向量(
packSnorm4x8
),但问题是总和将超过
1.0f
,但
(un)packSnorm
正在处理有符号的规范化值,我甚至不知道是否可以添加压缩数据并获得良好的结果。

我通过使用一个着色器存储缓冲区解决了这个问题,该缓冲区包含一个浮点数组。正如在注释中提到的,我正在尝试将向量存储到3D纹理中,SSB为每个组件包含一个浮点对于3D纹理的每一个纹理,向量的t,还有一个浮点数,用来保存添加的向量数。这会消耗很多内存,但似乎没有更好的解决方案

我正在原子化地将向量的每个分量添加到着色器存储缓冲区,为此我使用了
NV\u shader\u atomic\u float
扩展。
然后,在一个计算着色器中,我使用浮点数来保存向量量,用于平均并将结果写入实际的3D纹理。

我通过使用一个包含浮点数数组的着色器存储缓冲区解决了这个问题。正如在注释中提到的,我试图将向量存储到3D纹理中,SSB包含一个用于ea的浮点数对于3D纹理的每个纹理,向量的ch分量,还有一个浮点数,用于保存添加的向量数。这会消耗大量内存,但似乎没有更好的解决方案

我正在原子化地将向量的每个分量添加到着色器存储缓冲区,为此我使用了
NV\u shader\u atomic\u float
扩展。
然后,在计算着色器中,我使用浮点数来保存矢量量,以便在实际3D纹理中平均并写入结果。

您是否考虑过其他避免原子的选项,如在稍后的过程中累积矢量或使用本地组存储与计算着色器?您能详细说明您需要它做什么吗?我是renderi从灯光角度渲染场景,每个片段应将光源到片段的方向添加到3D纹理中,这些纹理包含我的体素化场景(用于体素圆锥体跟踪),目前我只是存储从光到体素中心的方向,但这并不准确,我应该存储入射光方向的平均向量。因此,如果我理解正确,每个碎片然后沿着其光线移动体积,并将光线方向添加到它移动通过的每个体素中?或者多个碎片如何进行ents访问相同的纹理?不,每个片段将其灯光信息添加到单个体素中,但由于阴影贴图分辨率比体素纹理大得多,多个片段落入同一个体素中。这与普通阴影贴图类似,唯一的区别是,我没有在普通场景中渲染灯光,而是使用frAGENT坐标(强制转换为ivec3)作为体素纹理的索引,并保存灯光信息(方向和强度)你有没有考虑过其他避免原子的方法,比如在以后的过程中积累向量,或者使用本地组存储和计算着色器?你能详细说明一下你的需要吗?我正在从灯光的角度渲染场景,每个片段都应该将从光源到片段的方向添加到3D纹理中se纹理包含我的体素化场景(用于体素圆锥体跟踪),目前我只是存储从光到体素中心的方向,但这并不准确,我应该存储入射光方向的平均向量。因此,如果我理解正确,每个碎片然后沿着其光线移动体积,并将光线方向添加到它移动通过的每个体素中?或者多个碎片如何进行ents访问相同的纹理?不,每个片段将其灯光信息添加到单个体素中,但由于阴影贴图分辨率比体素纹理大得多,多个片段落入同一个体素中。这与普通阴影贴图类似,唯一的区别是,我没有在普通场景中渲染灯光,而是使用frAGENT坐标(强制转换为ivec3)作为体素纹理的索引,并保存灯光信息(方向和强度)