1. Пользоваться форумом на планшетах и телефонах стало удобнее благодаря Tapatalk

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

Тема в разделе "RenderMan", создана пользователем -, 28 фев 2001.

Модераторы: Moderator.
  1. Guest

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

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

    можно

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

    что-то типа:

    string ImageFile = sprintf("sourceimages/fire/%d.tif.bb.tex",ageNormPP);
     
  3. Guest

    А вот есть маза что это не получится , это же не С++ :(
    Боюсь что надо в RIBе в каждом кадре шадеру другой mapname давать :(
    Но если кто-то знает как это сделать в SL , то пишите за мной бутылка ....
    pepsi :)))
     
  4. Guest

    В том то и дело что шейдер устанавливается один для всех спрайтов =(
    если бы можно было сделать шейдер перед каждым спрайтом, тогда бы это прокатило...
    а так параметр, который можно передать каждому спрайту в отдельности будет varying, a string не может быть varying для texture();
    в общем, @!#$...
    WBW, [mindy]
     
  5. Guest

    Дааа .... это проблема , обещаю хорошенько подумать над вопросом ,
    но мне кажется сделать это шэйдером врядли можно :((
    Есть совет ! Делай это НЕ в рендермане :)
     
  6. Guest

    А что-нибудь типа массива:
    uniform string particle_files[nfiles];
    Инициализировать его нужными строками при помощи sprintf(), а потом вызывать:
    texture(particle_files[number]).

    Не катит?
     
  7. Guest

    не, не катит... пробовал.
    катит только вот так:
    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
    .....
    работают конечно, но такой ценой.....
     
Модераторы: Moderator.

Поделиться этой страницей