我想要做的是多个具有RGB颜色值的灰度alpha位图,然后将得到的RGB位图绘制成加法屏幕,即在我想要的每个像素处:
p_new[r/g/b] = p_old[r/g/b] + colorValue[r/g/b] * grayscaleBitmapValue
我知道我可以构建一个中间RGB位图或纹理保持(colorValue [r / g / b] * grayscaleBitmapValue),但如果可能的话,我宁愿避免这个浪费的步骤,因为每个alpha位图都会相乘一个不同颜色值的数量。
在2D或OpenGL ES中执行此操作的最快方法是什么?
答案 0 :(得分:1)
对于2D绘图,请按如下方式设置Paint对象:
paint.setColorFilter(
new PorterDuffColorFilter(colorValue, PorterDuff.Mode.MULTIPLY));
paint.setXfermode(new PorterDuffXfermode(PorterDuff.Mode.ADD));
对于OpenGL,您的片段着色器可能如下所示:
varying vec2 texcoord;
uniform sampler2D texture;
uniform vec4 multColor;
void main() {
gl_FragColor = texture2D(texture, texcoord)*multColor;
}
...并调用glBlendFunc(GL_ONE,GL_ONE)进行加法混合。