mirror of
https://github.com/opensim/opensim.git
synced 2026-05-15 03:15:41 +08:00
add osTemperatureToLinearColor()
This commit is contained in:
@@ -6589,5 +6589,39 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
|
||||
|
||||
return LSL_Vector.Zero;
|
||||
}
|
||||
|
||||
public LSL_Vector osTemperatureToLinearColor(LSL_Float dtemp)
|
||||
{
|
||||
float temp = (float)dtemp.value;
|
||||
if (temp <= 1000f)
|
||||
return new LSL_Vector(1.0, 0.0401, 0);
|
||||
else if (temp >= 40000f)
|
||||
return new LSL_Vector(0.3277, 0.5022, 1.0);
|
||||
|
||||
float green;
|
||||
if (temp < 6600f)
|
||||
{
|
||||
green = temp - 1000f;
|
||||
green = ((((-7.87308e-13f * green) - 7.10085e-9f) * green) + 0.00022693f) * green + 0.0374249f;
|
||||
green = Math.Clamp(green, 0, 1.0f);
|
||||
|
||||
if (temp <= 19.0f)
|
||||
return new LSL_Vector(1.0, green, 0);
|
||||
|
||||
float blue = temp - 1900f;
|
||||
blue = ((((-5.97E-12f * blue) + 5.49E-08f) * blue) + 8.85465E-05f) * blue - 0.0058959f;
|
||||
blue = Math.Clamp(blue, 0f, 1.0f);
|
||||
|
||||
return new LSL_Vector(1.0, green, blue);
|
||||
}
|
||||
|
||||
temp = 0.01f * (temp - 6000f);
|
||||
float red = 1.897315f * MathF.Pow(temp, -0.346837f) + 0.0622044f;
|
||||
red = Math.Clamp(red, 0, 1.0f);
|
||||
|
||||
green = 1.261989f * MathF.Pow(temp, -0.251708f) + 0.200836f;
|
||||
green = Math.Clamp(green, 0, 1.0f);
|
||||
return new LSL_Vector(red, green, 1.0f);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -627,5 +627,6 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api.Interfaces
|
||||
LSL_String osAESDecrypt(string secret, string encryptedText);
|
||||
LSL_String osAESDecryptFrom(string secret, string encryptedText, string ivString);
|
||||
vector osGetLinkColor(LSL_Integer linknum, LSL_Integer face);
|
||||
vector osTemperatureToLinearColor(LSL_Float dtemp);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1807,5 +1807,11 @@ namespace OpenSim.Region.ScriptEngine.Shared.ScriptBase
|
||||
{
|
||||
return m_OSSL_Functions.osGetLinkColor(link, face);
|
||||
}
|
||||
|
||||
[MethodImpl(MethodImplOptions.AggressiveInlining)]
|
||||
public vector osTemperatureToLinearColor(LSL_Float dtemp)
|
||||
{
|
||||
return m_OSSL_Functions.osTemperatureToLinearColor(dtemp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user