я могу думать два способов для достижения этой цели:
Легче путь
Вы можете отделить каждую зону перекрашивать от маска в нескольких текстурах, таким образом, каждая текстура маски имеет только два цвета, одна должна быть прозрачной (альфа = 0), а другая - белой (255,255,255,255). Тогда каждый раз, вам нужно перекрашивать установить цвет мод для каждой маски на нужные и комбинат с текстурой источника, например:
SDL_SetRenderTarget(r, destiny);
SDL_SetBlendMod(r, SDL_BLENDMODE_NONE);
SDL_RenderCopy(r, source, destiny);
SDL_SetBlendMod(r, SDL_BLENDMODE_BLEND);
for(/* Each mask as m*/){ */
SDL_SetColorMod(m, c[i].r, c[i].g, c[i].b);
SDL_RenderCopy(r, source, destiny);
}
Alternative
Другой способ сделать это сочетание вручную, что позволило бы избежать предыдущего разделения, отображая каждую цветную область до окончательного цвета в каком-либо массиве или карте хэша и проходя через пиксель маски и изображения и перекрашивая, если вам нужно. Таким образом, в легче осуществить, если вы используете поверхности, а затем преобразовать текстуру, но вы можете сделать оба пути, поэтому я объясню это в псевдокоде:
s: source;
d: destiny;
m: mask;
c: [0x00ff00: 0xff000000, 0x0000ff: 0xdeadbeef];
for(i=0; i< s.pixels.size(); ++i){
if(c.count(m.pixels[i])){
destiny = (c[m.pixels[i]]+s.pixels[i])/2;
} else {
destiny = s.pixels[i];
}
}
В обоих примерах я использовал общую функцию смешивания для Комбинат, но вы можете попробовать другие, я думаю, что добавление может быть хорошей альтернативой.
Я думаю, что «более простой способ» - это то, за что я бы пошел, но я не уверен, что вы подразумеваете под именами переменных - например. является источником/судьбой основной текстуры или маски – LordAro
, и я не совсем уверен, что образ маски должен выглядеть так, не могли бы вы привести пример? – LordAro
ОК, все проработал, он отлично работает :) Спасибо – LordAro