有没有办法在Allegro中部分色彩斑点图
Is there a way to partially tint bitmaps in Allegro?
我正在编程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 scene
和c = 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中的默认着色器,以获取有关编写着色器的更多信息。<</
- 为什么 openmp 的并行不适用于矢量化色彩空间转换?
- openCV C++将对象/斑点简化为质心
- 我们可以将阈值应用于色彩空间模型的单个组件(如 RGB 和 LAB)吗?
- 使用 opencv 提取最大的斑点
- OpenCV 检测带有掩码的斑点
- 将斑点阵列转换为ints阵列
- OpenCv,Android:无法编辑转换为HLS色彩空间的相机帧像素
- 如何在咖啡中提取图层的斑点信息?
- 如何使用斑点检测器
- 将图像字段作为斑点类型更新为QT C 中的数据库
- 有没有办法在Allegro中部分色彩斑点图
- 图像处理 - 跟踪不同颜色的斑点
- OpenCV去除边缘斑点
- 生成用于sRGB到CIELAB色彩空间转换的3DLUT(.3dl文件)
- 什么是斑点?
- OpenCV和使用的色彩空间
- 在色彩空间之间转换图像
- 图像的色彩还原不工作
- 找出立体图像中斑点的真实位置和大小
- Direct3D11包含色彩空间转换吗?