LlGetSunDirection/fr
LSL Portail Francophone | LSL Portail Anglophone | Fonctions | Évènements | Types | Operateurs | Constantes | Contrôle d'exécution | Bibliothèque | Tutoriels |
Description
Fonction: vector llGetSunDirection( );177 | N° de fonction |
0.0 | Delais |
10.0 | Energie |
Renvoie un vector correspondant à la direction du soleil dans la région.
La position du soleil peut être statique ou dynamique selon le règlage du propriétaire de la sim.
Exemples
Cet exemple peut être utilisé pour déterminer s'il fait jour ou nuit dans la sim (dans l'univers SL) et allumer une lumière si nécessaire : si la valeur Z du vector renvoyé est négative, alors le soleil est sous l'axe de l'horizon.
<lsl>integer lightsOn = -1;//ni TRUE ni FALSE
CheckSun() {
vector sun = llGetSunDirection(); integer turnLightsOn = (sun.z < 0); if(turnLightsOn != lightsOn) { lightsOn = turnLightsOn; llSetPrimitiveParams([ PRIM_FULLBRIGHT, ALL_SIDES, lightsOn ]); }
}</lsl>
Notes
AVERAGE_SUN_TILT = -.25 * pi SEASONAL_SUN_TILT = .03 * pi SUN_NORMALIZED_OFFSET = .45
voici comment mSunOffset est calculé : <cpp>F64 daily_phase = DAILY_OMEGA * U64_to_F64(local_time / USEC_PER_SEC); F32 sun_phase = (F32)fmod(daily_phase, 2.0*F_PI); sun_hour -= 6.0f; mSunOffset = HOURS_TO_RADIANS * sun_hour - (0.25f * F_PI) * cosf(HOURS_TO_RADIANS * sun_hour) - sun_phase;
//Calcul de la direction du soleil :
void LLRegion::calculateSunInfo(
U64 current_time, LLVector3& directionp, LLVector3& ang_velocityp, F32& sun_phase)
{
U64 local_time = current_time; if(getSunFixed()) { local_time = 0; } // Le déplacement du soleil sur une journée est réalisé suivant un plan incliné . // L'inclinaison du plan varie légèrement au cours de l'année // F64 est utilisé pour éviter les erreurs d'arrondi F64 daily_phase = DAILY_OMEGA * U64_to_F64(local_time / USEC_PER_SEC) + mSunOffset; F64 yearly_phase = YEARLY_OMEGA * U64_to_F64(local_time / USEC_PER_SEC); F32 tilt = AVERAGE_SUN_TILT + SEASONAL_SUN_TILT_AMPLITUDE * (F32)sin(yearly_phase);
sun_phase = (F32)fmod(daily_phase, 2.0*F_PI); // Déplace le soleil selon un plan directionp.setVec((F32)cos(-daily_phase), (F32)sin(-daily_phase), 0.0f); //incline le plan sur l'axe X (vers l'est) directionp.rotVec(tilt, 1.0f, 0.0f, 0.0f);
// Calcule la vitesse angulaire (radians par second) ang_velocityp.setVec(0.0f, 0.0f, (F32)DAILY_OMEGA); ang_velocityp.rotVec((F32)tilt, 1.0f, 0.0f, 0.0f);
// James voulait que la nuit soit plus courte que le jour. // On peut réaliser ce paramétrage en décalant le centre de l'orbite du soleil (sens positif selon l'axe Z) et en normalisant le nouveau vector directionp.mV[VZ] += SUN_NORMALIZED_OFFSET; F32 R = directionp.normVec();
// Nous devons aussi corriger la vitesse angulaire // // V = W % R // V a une magnitude constante // Si R augmente, W diminue // W et R sont toujours perpendiculaires // ===> // W *= 1 /
Voir également
Fonctions
• | llGetTimeOfDay | – | Renvoie l'heure |