如何绘制一个迷你地图OpenGL和OpenGL ES?

我正在试图画一张迷你地图。 成功通过FBO将当前屏幕放到较小的屏幕(迷你地图)。

但是我不知道如何在hover的时候让迷你屏幕更加明亮。 你可以想象,真实的屏幕非常大,你在左下方有一个迷你屏幕(如“星际争霸”),当你hover在它上面时,它比其他的更亮。

我试图在FBO中使用多个附件,但它不起作用。 事实上,我不知道多重附件如何工作,它是如何使用的?

我的方法是先用attachment_0绘制地图,然后用attachment_1绘制一个hover的矩形。 绑定然后以合法的顺序绘制所有的附件纹理(NOT WORKED)。

我的意思是,第一个画一个迷你“大屏幕”。

第二个hover时绘制一个更亮的矩形。

任何人都可以引导我如何做到这一点或给我任何建议吗?

非常感谢你!

多个颜色附件用于从片段着色器的相同调用中写入多个颜色目标。 也就是说,它们是用于片段着色器的输出

多个附件的常见用法是在执行延迟着色时,其中可能有一个用于输出位置的附件,一个用于输出法线,一个用于输出漫reflection颜色。

如果要在绘图时使用多个纹理作为input ,则将纹理绑定到单独的纹理单元,并将这些单元的索引存储在采样器制服中。 对于单个纹理,这是同样的事情,但是如果使用的是其他纹理单位而不是0,则可能没有明确这样做。

OpenGL有一组纹理单元,从GL_TEXTURE0命名到最大。 在过去,每个纹理单元被采样,结果以固定functionstream水线的方式结合在一起。 您可以通过调用glActiveTexture(GL_TEXTURE0 + unitNumber)来selectglBindTexture将影响的当前纹理单元。

一旦将纹理ids绑定到纹理单元,就可以将着色器中的采样器统一variables与纹理单元相关联。 如果在着色器中有uniform sampler2D mapTexture ,则可以在代码中使用glGetUniformLocation(prog, "mapTexture")来查找uniform,并使用glUniform1i(that, N)指示它应从纹理单元N中读取。

有关更多详细信息,请考虑阅读适当的文章,如纹理上的arcsynthesis部分 。

您提出的任务,在基础图像上绘制基础图像可以通过两种方式完成:

  • 用您的基础图像绘制四边形纹理,启用alpha混合,并在顶部修改绘制四边形;
  • 用着色器绘制四边形,将纹理与某些修改相结合,无论是从纹理还是以编程方式。