summaryrefslogtreecommitdiff
path: root/doc/devel/planetrotate
blob: 387c455f0ec397b429120778f7ab8a1a5298529e (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Planet-rotate code rev3:
written by PhracturedBlue
Date: Nov 1, 2002

This is the code to make the planets spin when in orbit view.
The planet will zoom in (as in the 3do version)
Shield support is very preliminary, mosly becuase I have not figured
out how to get the 'look' right.

The planet rotation speed is controlled by ROTATION_TIME which is defined in plangen.c.
The default is '22' which gives a speed comparable to the DOS version of the game

The planet zoom speed is defined by PLANET_ZOOM_SPEED which is defined in pl_stuff.c

The lighting algorithm is really just a hack.  All lighting code is in plangen.c
Currently, lighting is performed  by placing the light source at a certain distance 
(LIGHT_MULT) from the center of the planet (a value of 1 would place the light at 
the planet's radius. (The angle is determined by the planet's position in orbit with
respect to the sun).  The brightest poinnt will have the original color of the topo-map.
The light falls off as the cos(r^2/(LIGHT_RADIUS^2)).
The light can never be dimmer than AMBIENT_LIGHT

The shield is done in 2 parts:  the halo and the planet-mask.  Whether this is needed or
not, I don't know, but it gives a bit more flexibility in how the effect is applied.

The code works by blitting directly to an SDL_Surface, rather than using DrawBatch (and 
the rendering thread).  This gives a huge performance win (My P3-1000 went from ~40fps
using the DrawBatch to ~500fps using the current method).  All lighting, planet tilt, and
sphere->plane mapping is precomputed into the 'map_rotate' and 'phong' tables (in plangen.c)
To optimize performance (there is no floating-poinnt code used during the actual frame
generation)