OGRE Шейдер спрайтов + с# эффект
Необходимо реализовать шейдер спрайтов для использования в движке OGRE.
Основные требования:
1)Поддержка нескольких спрайтов(например 3х) для одного объекта, которые заменяют друг
друга на разных расстояниях, причем по мере приближения/удаления от объекта один постепенно перетекает в другой.
2)При изменении позиции наблюдателя спрайт должен меняться:
- при изменении угла обзора - вращаться, причем скорость вращения
зависит от расстояния.
Чем ближе - тем сильнее реагирует(это важный момент!) на изменение угла обзора.
угол поворота спрайта
Dz=F(SphRad(dx,dy),S)=F(dx,dy,S)
где dx,dy -соответственно углы в x и y плоскостях, вместе формирующие
угол обзора, а S- расстояние от наблюдателя до источника света.
что-то вроде
F(dx,dy,s):=2Pi*sin(x)*sin(y)*e^(1/(1+s))
или даже попроще
F(dx,dy,s):=sign(x*y)*sqrt(|x*y|)*(1/(1+s))
где sign(a):=1 if a>0;0 if a==0;-1 if a
- при изменении расстояния - менять масштаб
Size=g(s)
где s - расстояние от наблюдателя до источника
например g(s):=((s+10)/(s+9))
3) В качестве картинок спрайтов нужно использовать png формат (интересует главным образом полноценная поддержка альфа-канала)
4) для вычисления видимых пикселей следует использовать OGRE occlusion query
5)в шейдере должны быть настраиваемые(через класс эффекта) параметры
На выходе должно быть:
1)файл .material
2)файлы ps/vs шейдеров
3)файл эффекта c# (см пример)
4)подробное описание