我正在编写一个程序来绘制一些应该模仿输入(光栅)图像的plygons . 绘制形状后,我需要将我的渲染图像与输入图像进行比较,然后决定是否实现了目标 . 目前我正在使用CIMG库来绘制 . 整个程序在CPU上运行 . 我尝试使用使用OpenGL进行绘图的SFML - 渲染非常快,但是将图像从GPU复制到CPU(与输入图像进行比较)需要很长时间 . 我想要:
-
在GPU上渲染多边形
-
将输入(光栅)图像发送到GPU
-
使用简单的"pixel after pixel"比较GPU上的图像:(r1-r2)^ 2(g1-g2)^ 2(b1-b2)^ 2
-
将比较结果(一个数字)发送到CPU
不幸的是,我不知道是否可以通过OpenGL实现它(比较两个图像) . 如果有可能,我将学习OpenGL或任何其他允许快速完成任务的库 .
1 回答
以下是可能方法的概述 . 他们真的只是让你入门的秘诀 .
将图像渲染为纹理(我将其称为
Render
)并将原始图像复制到另一个纹理(我称之为Orig
) . 禁用任何纹理过滤 .创建一个将计算差异的片段着色器 . 在伪代码中:
在图像大小的四边形上运行此片段着色器,将输出发送到另一个纹理(我将其称为
Difference
) . 您可能需要启用矩形纹理 .在四边形
image_width x 1
上运行此片段着色器,将输出发送到另一个纹理(PartialSum
) .PartialSum
读回CPU(它要小得多)并在那里求和,或者创建单片段四元组并运行修改后的求和着色器以得到一个数字,而不是读回来 .