Ентропи не любит отритцательные логарифмы
Я просто поставил проверку на отритцательные и нулевые значения в файле walias.h (а больше ни где логарифм не берется)
В рамповых темплах рендерман юзает функцию spline с аргументом "solvecatrom" что по сути является обратной функцией к splin("catrom"....). Кстати в риспеке я не нашел описания этого аргумента. Ентропия соответственно не понимает этого аргумента и вроде не имеет обратной функции. Так как не было времени разбираться с catrom-ом я написал упрощенное линейное решение:
/* solvespline.h */
#ifndef _H_solvespline
#define _H_solvespline
float solvespline ( varying float val; float k0, k1, k2, k3, k4, k5,
k6, k7, k8, k9, k10, k11,
k12, k13, k14, k15,
k16, k17, k18, k19, k20, k21,
k22, k23, k24, k25, k26, k27,
k28, k29, k30, k31 )
{
float ind = 1, result = 0;
float arr[32] = {k0, k1, k2, k3, k4, k5,
k6, k7, k8, k9, k10, k11,
k12, k13, k14, k15,
k16, k17, k18, k19, k20, k21,
k22, k23, k24, k25, k26, k27,
k28, k29, k30, k31 };
for (ind = 1; ind< 30 ; ind+=1 ){
if (arr[ind] >= arr[ind+1]) {
if (val<= arr[ind] && val>= arr[ind+1]) {
result = (ind -1 + (float(arr[ind])-val)/float(arr[ind] - arr[ind+1]))/29.0;
break;
}
} else {
if (val>= arr[ind] && val<= arr[ind+1]) {
result = (ind -1 + (val - float(arr[ind]))/float(arr[ind+1] - arr[ind]))/29.0;
break;
}
}
}
return result;
}
#endif
и подставил во все темплы :
#ifdef ENTROPY
#include "solvespline.h"
#endif
...........
#ifndef ENTROPY
k = float spline( "solvecatrom", .......
#else
k = solvespline( ...........
#endif
То что это линейная интерполяция практически не видно даже при одной двух точках на сплайне. Хтоя если кто-то напишет catrom-овское решение, будет круто
Кстати в первом релизе был глюк - float ind я вначале описал как float i, так я час промучался - не работало ни фига... Потом я написал уже ind, и все заработало, более того после перезагрузки компа стало работать и с i !!!! Шайтан
А еще с первым были глюки когда включаешь ГИ и используешь слимовские лайты, во втором этого вроде нет.