meow-7.2.2
Rider Linden 2018-06-25 14:44:56 -07:00
commit 6fb68454d5
1 changed files with 30 additions and 15 deletions

View File

@ -35,12 +35,28 @@
//=========================================================================
static const F32 NIGHTTIME_ELEVATION = -8.0f; // degrees
static const F32 NIGHTTIME_ELEVATION_SIN = (F32)sinf(NIGHTTIME_ELEVATION * DEG_TO_RAD);
static const LLVector3 DUE_EAST = LLVector3::x_axis;
static LLQuaternion convert_azimuth_and_altitude_to_quat(F32 azimuth, F32 altitude)
{
F32 sinTheta = sin(azimuth);
F32 cosTheta = cos(azimuth);
F32 sinPhi = sin(altitude);
F32 cosPhi = cos(altitude);
LLVector3 dir;
// +x right, +z up, +y at...
dir.mV[0] = cosTheta * cosPhi;
dir.mV[1] = sinTheta * cosPhi;
dir.mV[2] = sinPhi;
LLVector3 axis = LLVector3::x_axis % dir;
axis.normalize();
F32 angle = acos(LLVector3::x_axis * dir);
LLQuaternion quat;
quat.setEulerAngles(0.0f, altitude, azimuth);
quat.setAngleAxis(angle, axis);
return quat;
}
@ -772,21 +788,15 @@ LLSD LLSettingsSky::translateLegacySettings(const LLSD& legacy)
}
if (legacy.has(SETTING_LEGACY_EAST_ANGLE) && legacy.has(SETTING_LEGACY_SUN_ANGLE))
{ // convert the east and sun angles into a quaternion.
F32 two_pi = F_PI * 2.0f;
{
// get counter-clockwise radian angle from clockwise legacy WL east angle...
F32 azimuth = two_pi - legacy[SETTING_LEGACY_EAST_ANGLE].asReal();
F32 altitude = legacy[SETTING_LEGACY_SUN_ANGLE].asReal();
F32 azimuth = -legacy[SETTING_LEGACY_EAST_ANGLE].asReal();
F32 altitude = legacy[SETTING_LEGACY_SUN_ANGLE].asReal();
LLQuaternion sunquat = convert_azimuth_and_altitude_to_quat(azimuth, altitude);
// original WL moon dir was diametrically opposed to the sun dir
LLQuaternion moonquat = convert_azimuth_and_altitude_to_quat(azimuth + F_PI, -altitude);
//LLVector3 sundir = DUE_EAST * sunquat;
//LLVector3 moondir = DUE_EAST * moonquat;
LLQuaternion moonquat = convert_azimuth_and_altitude_to_quat(azimuth + F_PI, altitude + F_PI);
newsettings[SETTING_SUN_ROTATION] = sunquat.getValue();
newsettings[SETTING_MOON_ROTATION] = moonquat.getValue();
@ -826,15 +836,20 @@ void LLSettingsSky::calculateHeavenlyBodyPositions() const
LLQuaternion sunq = getSunRotation();
LLQuaternion moonq = getMoonRotation();
mSunDirection = DUE_EAST * sunq;
mMoonDirection = DUE_EAST * moonq;
mSunDirection = LLVector3::x_axis * sunq;
mMoonDirection = LLVector3::x_axis * moonq;
mSunDirection.normalize();
mMoonDirection.normalize();
//LL_WARNS("LAPRAS") << "Sun info: Rotation=" << sunq << " Vector=" << mSunDirection << LL_ENDL;
//LL_WARNS("LAPRAS") << "Sun info: Rotation=" << sunq << " Vector=" << mSunDirection << LL_ENDL;
//LL_WARNS("LAPRAS") << "Moon info: Rotation=" << moonq << " Vector=" << mMoonDirection << LL_ENDL;
if (mSunDirection.lengthSquared() < 0.01f)
LL_WARNS("SETTINGS") << "Zero length sun direction. Wailing and gnashing of teeth may follow... or not." << LL_ENDL;
if (mMoonDirection.lengthSquared() < 0.01f)
LL_WARNS("SETTINGS") << "Zero length moon direction. Wailing and gnashing of teeth may follow... or not." << LL_ENDL;
llassert(mSunDirection.lengthSquared() > 0.01f);
llassert(mMoonDirection.lengthSquared() > 0.01f);
}