有没有办法在Allegro中部分色彩斑点图

Is there a way to partially tint bitmaps in Allegro?

本文关键字:色彩 斑点 中部 Allegro 有没有      更新时间:2023-10-16

我正在编程Allegro 5中的游戏,目前正在研究我的图形算法。计算后,我最终得到了两个 ALLEGRO_BITMAP* -objects,其中一个是我的"场景",上面绘制了地形,另一个是阴影图。

场景只是在位图上绘制的游戏元素的纹理。阴影图是使用黑色的浅色和白色颜色的位图。

用于在屏幕上绘制这些位图,我使用 al_draw_scaled_bitmap(...)al_set_blender(ALLEGRO_DEST_MINUS_SRC, ALLEGRO_ONE, ALLEGRO_ONE)从场景中提取阴影映射的白色元素以使这些元素可见。

我遇到的问题是,我想在阴影图上拥有所有白色的像素,以在世界色上涂有色,这是在以前在每个帧中都计算出来的,并且所有黑色元素都没有简单地修改(灰色(灰色)表示部分着色)。

最终颜色可以像 p.r * c.r + 1 - p.r一样计算使用p = the pixel-color on the scenec = the world-color,用于RGB中的红色,绿色和蓝色通道。

是否有任何方法可以在Allegro 5 中实现部分着色效果(可能没有大量透支)

我想到使用着着色器,但是我还没有找到使用我的ALLEGRO_BITMAP* -Objects实现这些着色器的解决方案。

Allegro的搅拌机非常简单,因此您需要一个着色器。只需写一个着色器,当您绘制阴影映射时,al_use_shader着色器,然后完成后al_use_shader(NULL)。着色器可以使用al_get_default_shader_source可以获得的默认顶点源。因此,您只需要写片段着色器即可。您的片段着色器应具有uniform vec4,即颜色。您还将有x,y浮子,可以重新说明目的地的x和y值。它也将有一个采样器,即场景位图(应该是目标,因为您要绘制它)。您从x,y(x和y应为0到1的采样器中采样,可以使用Xpixel/width(与y相同)获得这些样品,然后用输入颜色进行计算,然后存储gl_FragColor中的结果(本文假设您使用的是GLSL(OpenGL)。相同的原理适用于Direct3D。)查看Allegro源代码中的SRC/Shader_source.inc中的默认着色器,以获取有关编写着色器的更多信息。<</