| 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 | |
|---|
| 8 | use strict; # turn 'strict' mode on |
|---|
| 9 | use warnings; # -w |
|---|
| 10 | |
|---|
| 11 | # Name, Heading, Altitude (Werte aus Terragen, via Email von Peter Kleiner). |
|---|
| 12 | my @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 | |
|---|
| 21 | for (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 | } |
|---|