这就是我所拥有的:
我想找到两个openGL纹理之间的距离尽可能快(距离函数的准确性是最不重要的)。
实际上,它们最初可能不是纹理。 我不妨将帧缓冲区域与加载的纹理进行比较,或者做一些其他的“魔术”。
如何做到超级快?
答案 0 :(得分:5)
事实上,这与OpenGL几乎没有关系。 OpenGL只是一个3D光栅化“驱动程序”。
主要思想是获得距离/相似度算法,这是一项棘手的任务。首先,您可以执行Root Mean Square Deviation算法。它会给你一些像素值的距离。
当您在CPU上实施它时,您可以根据需要对其进行基准测试,并可能转换为OpenCL。我不认为将“企鹅”加载到GPU只是为了将它与你准备的其他形状进行比较,它本身就是一个超快的过程。
尝试更加具体地说明你的下一个问题,并避免采用“我有一个非常好的显微镜,我怎么用超快速打钉子?”的态度。
答案 1 :(得分:2)
您可以使用Pearson-Product匹配不同的图像。你可以在answer找到它。您可以直接关联两个图像,而不是将模板与原始图像匹配得更少。
很快,您会得到每个textel与平均值的偏差,从而为您提供相关因子。
但是使用着色器改进该算法可能有点困难。首先,你必须计算textel平均值:也许一些OpenGL扩展(如直方图)可以帮助你完成这项任务。
然后,您可以使用片段着色器执行单分量计算(每个textel与之前计算的平均值之间的差异。平均textel必须以均匀的方式传递,结果应存储在浮点纹理中(您可以在帧缓冲对象上渲染它。)
然后,你应该总结得到的纹理的所有textel,以获得两个源纹理之间的相关性。
在图像非常大的情况下,这可能是值得的。否则我认为最好在CPU上执行算法,使用SIMD指令集(如MMX,SSE,AVX)。