root/tools/SunPositions.pl

Revision 37, 2.2 KB (checked in by Carsten, 2 years ago)

Added the tools to directory tools.

Line 
1# Sonnenpositionen zu den SkyDomes von Peter Kleiner
2#
3# Für das "Heading"  gilt: Im Ca3DE-Koordinatensystem ist 0 entlang der pos. X-Achse, 90 entlang der pos. Y-Achse.
4#                          ACHTUNG: Mit dem Heading eines Entities verhält es sich genau umgekehrt!
5# Für die "Altitude" gilt: 0 ist am Horizont, 90 ist senkrecht nach oben.
6#                          ACHTUNG: Für den Pitch eines Entities ist 90 senkrecht nach unten!
7
8use strict;             # turn 'strict' mode on
9use warnings;           # -w
10
11# Name, Heading, Altitude  (Werte aus Terragen, via Email von Peter Kleiner).
12my @SkyDomes = ( [ 'PK_BrightDay1', -84.611, 39.719 ],
13                 [ 'PK_BrightDay2',  91.397, 45.616 ],
14                 [ 'PK_Autumn'    , 137.386, 45.000 ],
15                 [ 'PK_Winter'    , -60.000, 66.218 ],
16                 [ 'PK_Night'     ,  91.081, 31.430 ],
17                 [ 'PK_Sunset'    , -86.760, 22.521 ],
18                 [ 'PK_Sunset2'   ,  35.961,  7.125 ] );
19
20
21for (my $sd=0; $sd<=$#SkyDomes; $sd++)
22{
23    # Die Richtungsvektoren der Sonne errechnen sich wie folgt:
24    my $Heading  = $SkyDomes[$sd][1]/180.0*3.1415926;
25    my $Altitude = $SkyDomes[$sd][2]/180.0*3.1415926;
26
27    my $x = cos($Altitude) * cos($Heading);
28    my $y = cos($Altitude) * sin($Heading);
29    my $z = sin($Altitude);
30
31    # Beachte: Wir wollen die Vektoren des Sonnenlichts (von der Sonne in Richtung Boden, nicht umgekehrt),
32    # damit wir die ausgedrucketen Zahlen direkt in die Maps übernehmen können.
33    $x = -$x;
34    $y = -$y;
35    $z = -$z;
36
37    # Die folgende Zeile war ursprünglich nicht nötig, als die SkyDomes vor Subversion Revision 103 noch mit dem DrawableSkyDomeT
38    # "per Hand" gezeichnet wurden. Nun (ab Rev. 105) werden sie als echte Cube-Maps gezeichnet, und die Übergangstabelle
39    # lf -> px,   ft -> pz,   up -> py (und 90 Grad nach rechts drehen),
40    # rt -> nx,   bk -> nz,   dn -> ny (und 90 Grad nach links  drehen)
41    # entspricht einer Spiegelung an der YZ-Ebene, daher ist auch eine entsprechende Spiegelung des Sonnenlichtvektors notwendig.
42    $x = -$x;
43
44    printf("%2u %-20s Hdg%8.3f  Alt%7.3f  (%8.5f %8.5f %8.5f)\n", $sd, $SkyDomes[$sd][0], $SkyDomes[$sd][1], $SkyDomes[$sd][2], $x, $y, $z);
45}
Note: See TracBrowser for help on using the browser.