Любому шейдеру в Pixilang передаются следующие параметры:
PS_T - номер пикси-контейнера с текстурой;
PS_TX - текущая координата X на текстуре (Fixed point);
PS_TY - текущая координата Y на текстуре (Fixed point);
PS_TP - номер пикселя на текстуре;
PS_P - номер пикселя на экране.
PS_R - окончательный цвет точки
Соответственно, шейдер с такими параметрами выполняется для каждого пикселя рисуемой картинки (или треугольника).
Вот обсолютно прозрачный шейдер:
scr = 0 PS_R = scr[ PS_P ]
Теперь смотрим. Мы тут использовали параметр PS_P - это номер пикселя на экране, если обращаться к нему, как к массиву.
Нетрудно понять, что если написать вот так
scr = 0 PS_R = scr[ PS_P + 2 ]
то, мы будем получать тот экранный пиксель, который правее на 2. Соответственно, картинка, отрисованная этим шейдером хоть и будет по прежнему прозрачной, но начнет как бы преломлять окружающую среду (сдвигать на 2 пикселя)
Это простой пример преломления, без учета рельефа картинки.
А чтобы учесть рельеф, заменим размер сдвига (число 2) на вот такую штуку - get_red( PS_T[ PS_TP ] )
То есть, сдвиг пикселей будет зависеть от яркости красной составляющей картинки.
Результат:
SHADER:
scr = 0 PS_R = scr[ PS_P + get_red( PS_T[ PS_TP ] ) ]
ret
Чтобы включить такой шейдер, пишем:
pixel_shader( SHADER )
Как сделать шейдер преломления
- NightRadio
- Site Admin
- Posts: 3944
- Joined: Fri Jan 23, 2004 12:28 am
- Location: Ekaterinburg. Russia
- Contact: