Correct LightLut_FromFunc/LightLutDA_Create input range

This commit is contained in:
fincs 2017-03-15 16:42:51 +01:00
parent 99be4ec656
commit 33c6a10be5

View File

@ -35,11 +35,15 @@ void LightLut_FromFunc(C3D_LightLut* lut, C3D_LightLutFunc func, float param, bo
int i; int i;
float data[512]; float data[512];
memset(data, 0, sizeof(data)); memset(data, 0, sizeof(data));
int start = negative ? (-127) : 0; int start = negative ? (-128) : 0;
for (i = start; i < 128; i ++) for (i = start; i <= 128; i ++)
{ {
data[i & 0xFF] = func((float)i / 127.0f, param); float x = i/128.0f;
if (i != start) data[(i & 0xFF) + 255] = data[i & 0xFF] - data[(i-1) & 0xFF]; float val = func(x, param);
if (i < 128)
data[i & 0xFF] = val;
if (i > start)
data[(i & 0xFF) + 255] = val - data[(i-1) & 0xFF];
} }
LightLut_FromArray(lut, data); LightLut_FromArray(lut, data);
} }
@ -48,17 +52,19 @@ void LightLutDA_Create(C3D_LightLutDA* lut, C3D_LightLutFuncDA func, float from,
{ {
int i; int i;
float data[512]; float data[512];
data[511] = 0;
lut->scale = 1.0f / (to-from); float range = to-from;
lut->scale = 1.0f / range;
lut->bias = -from*lut->scale; lut->bias = -from*lut->scale;
for (i = 0; i < 256; i ++) for (i = 0; i <= 256; i ++)
{ {
float dist = ((float)i/255 - lut->bias) / lut->scale; float x = from + range*i/256.0f;
data[i] = func(dist, arg0, arg1); float val = func(x, arg0, arg1);
if (i < 256)
data[i] = val;
if (i > 0) if (i > 0)
data[i+255] = data[i]-data[i-1]; data[i+255] = val-data[i-1];
} }
LightLut_FromArray(&lut->lut, data); LightLut_FromArray(&lut->lut, data);