Render.ru

рендер партиклов-спрайтов

#1
Проблема состоит в следующем - мне надо чтобы на каждом партикле лежала своя, определенная из сиквенса мапа.
можно ли в шейдере делать следующую конструкцию:

surface accum(varying float ageNormPP = 0)
{
string ImageFile = "sourceimages/fire/"+ageNormPP+".tif.bb.tex";
--------------------------------------------------------^^^^^^^^^^^^^^^^^^
т.е. можно ли какнибудь сделать функцию IntToStr или какое-нибудь приведение типов? я не нашел как... =(
Заранее благодарен, [mindy].
 
#2
можно

sprintf по-моему работает везде

что-то типа:

string ImageFile = sprintf("sourceimages/fire/%d.tif.bb.tex",ageNormPP);
 
#3
А вот есть маза что это не получится , это же не С++ :(
Боюсь что надо в RIBе в каждом кадре шадеру другой mapname давать :(
Но если кто-то знает как это сделать в SL , то пишите за мной бутылка ....
pepsi :)))
 
#4
В том то и дело что шейдер устанавливается один для всех спрайтов =(
если бы можно было сделать шейдер перед каждым спрайтом, тогда бы это прокатило...
а так параметр, который можно передать каждому спрайту в отдельности будет varying, a string не может быть varying для texture();
в общем, @!#$...
WBW, [mindy]
 
#5
Дааа .... это проблема , обещаю хорошенько подумать над вопросом ,
но мне кажется сделать это шэйдером врядли можно :((
Есть совет ! Делай это НЕ в рендермане :)
 
#6
А что-нибудь типа массива:
uniform string particle_files[nfiles];
Инициализировать его нужными строками при помощи sprintf(), а потом вызывать:
texture(particle_files[number]).

Не катит?
 
#7
не, не катит... пробовал.
катит только вот так:
color a[nfiles];
a[1] = texture("a.1.tex",...);
a[2] = texture("a.2.tex",...);
.....
но этот способ жрет чудовищное кол-во памяти
равно как и такой:
if (imageNum=1) Cl=texture("a.1.tex",...); else
if (imageNum=2) Cl=texture("a.2.tex",...); else
.....
работают конечно, но такой ценой.....
 
Сверху