А грабли заключаются в том, что менять живую текстуру прямо в видеопамяти операция дорогая, плюс у тебя написана абсолютно математически неправильно.
Если надо в игре менять цветность и оттенок - надо делать свой пиксельный шейдер (задача скажем так нетривиальная, и требует внесения модификаций в HGE или скачать уже модифицированный). Шейдер посчитает для каждого пикселя текстуры нужный оттенок и выведет на экран уже готовый новый пиксель.
Либо хранить текстуры в черно белом цвете, и множить на нужный цвет прямо при выводе - HGE это позволяет.
Спасибо! буду разбиратся:) пока оставил как есть, HUE при помощи HSB:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
void hgeSprite::SetHUE(float h,float s,float v)// h [0,360] s [0,1] v [0,1] { DWORD* tex; int w=tex_width; tex = hge->Texture_Lock(quad.tex,true,0,0,tex_width,tex_height); hgeColorHSV *color; color=new hgeColorHSV(0,0,0,0); for(int i=0;i<tex_width;i++)for(int k=0;k<tex_height;k++) { color->SetHWColor(tex [ i + k * w ]); color->AddColor(h/360,s,v,0); tex [ i + k * w ]= color->GetHWColor(); } hge->Texture_Unlock(quad.tex); }
мне это было необходимо лишь для создания рандомной раскраски(из заданного списка), посему оптимальным решением для меня стало создание массива текстур с "хуем" и их рандомный выбор. P.S. раскраска черно-белого спрайта увы мне не подходит