Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/146.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

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
C++ 使用片段着色器计算纹理_C++_Opengl_Shader_Textures - Fatal编程技术网

C++ 使用片段着色器计算纹理

C++ 使用片段着色器计算纹理,c++,opengl,shader,textures,C++,Opengl,Shader,Textures,我有两个使用片段着色器生成的纹理。我想能够计算出每个纹理中高于某个颜色强度的texel数 如何做到这一点 我最初的想法是在生成纹理之前使用片段着色器计算这些纹理。然而,这需要某种全局计数器。我无法使用遮挡查询,因为纹理是从其他纹理创建的。我使用的是OpenGL 2.1。您始终可以在帧缓冲区上运行像素着色器,将阈值以上的所有像素设置为白色,将其余像素设置为黑色。然后抓取帧缓冲区的图片并计算白色像素数 我想你不需要每一帧都这样做。如果是,您可能需要更改您的要求…我已经使用顶点和片段着色器完成了此操作

我有两个使用片段着色器生成的纹理。我想能够计算出每个纹理中高于某个颜色强度的texel数

如何做到这一点


我最初的想法是在生成纹理之前使用片段着色器计算这些纹理。然而,这需要某种全局计数器。我无法使用遮挡查询,因为纹理是从其他纹理创建的。我使用的是OpenGL 2.1。

您始终可以在帧缓冲区上运行像素着色器,将阈值以上的所有像素设置为白色,将其余像素设置为黑色。然后抓取帧缓冲区的图片并计算白色像素数


我想你不需要每一帧都这样做。如果是,您可能需要更改您的要求…

我已经使用顶点和片段着色器完成了此操作

我为纹理中的每个像素声明一个点顶点并渲染它们

我声明一个1D的屏幕外渲染纹理,它是我想要的桶数的长度。您可以使用1个存储桶,但当每个片段等待写入同一像素时,它会降低您的速度。我发现32对我来说通常都很有效

将混合模式设置为“相加”

在顶点着色器中,I mod gl_VertexID为桶数,并将该范围设置为-11

采样每个顶点的纹理(实际上等于每个像素),并将gl_颜色设置为白色表示有效像素,黑色表示无效像素(基本上为1或0)

对1D纹理进行回读,并将值相加。这将是像素的计数

我在过去做过的第二种方法是第一次传递到与输入大小相同的屏幕外纹理,并将输入分类为1或0。接下来,渲染为宽度和高度的一半的纹理,并采样4次添加和写入。继续这样做,直到您找到1x1并读回值。

谢谢您的想法,
我发现一个简单的方法,我认为是最有效的。我最初认为遮挡查询只能用于几何体,但也可以用于纹理

  • 启用遮挡查询
  • 使用片段着色器渲染图像,并根据需要放弃下面的纹理 颜色强度
  • 从查询中检索通过绘图测试的texel数

  • 是的,每一帧都需要这样做。好吧,大约每30帧500次。刚刚找到这个,这正是我想要达到的。我想计算图像之间的相似性。有人知道这种技术吗?它有用吗?真的有用吗?文档似乎很清楚“
    discard
    无关紧要”,但它似乎仍然有效。所以医生可能只是有点困惑。