- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
unsigned int mapGray(double color/*0.0 --- 255.0*/)
{
int base = static_cast<unsigned char>(color);
if(base>=255)
return 0xFFFFFFFF;
else if(base<0)
return 0x000000;
double frac = color-base;
unsigned char r = 0;
unsigned char g = 0;
unsigned char b = 0;
if(frac<1.0/14.0) {
} else if(frac<3.0/14.0) {
r=1;
} else if(frac<5.0/14.0) {
b=1;
} else if(frac<7.0/14.0) {
g=1;
} else if(frac<9.0/14.0) {
b=1;
r=1;
} else if(frac<11.0/14.0) {
g=1;
b=1;
} else if(frac<13.0/14.0) {
r=1;
g=1;
} else {
r=1;
g=1;
b=1;
}
return (base+r)<<16 | (base+g)<<8 | (base+b) | 0xFF000000;
}
Как потом base может быть больше 255 или меньше 0.
Если это необходимый хак, то такие мется в коде оюязательно сопровождаются комментарием, который раскрывает суть хака, чтоб не ломать голову полчаса, смотря на шаманство.
В монохромных рендерах в областях с медленным переходом цветов могут быть видны "ступеньки", на которых цвет меняется от, например, 0x101010 до 0x111111. Только между этими двумя цветами есть ещё цвета 0x101011, 0x101110, 0x111010, 0x101111 и так далее, использовав которые, можно сделать картинку более "плавной". Где-то я эту идею подглядел, а где - уже не помню.
https://devoln.github.io/texgen/
Раньше там можно было сохранять результат и делиться ссылкой, но сервис, который я использовал в качестве бекенда, перестал существовать.
Сейчас пилю новую версию, которая будет убийцей Shader Toy.
Это здорово.
Это очень хорошо!
if(base>=255)
return 0xFFFFFFFF;
else if(base<0)
return 0x000000;
Число переводится в unsigned char, поэтому оно не может быть отрицательным или больше 255.
Остальные строки вроде больше нерациональности касаются.