Solar position is expressed as a direction and angle of height from where you are standing. The terminology is [azimuth,elevation], [az,el], =(compass direction, angle from horizon). See sunearthtools.com for a great implementation of a 2D map, where a circle on the map represents the horizon, and the path of Solar position is given as a function time.
The Python script for sale here uses only the most basic inputs to the Solar position calculation: Solar time, latitude, and component of the Earth's inclination of the Earth towards the Sun. (For difference between Solar and clock times, search analemma and equation of time.)
The Solar day starts at 12am. Starting with a model for the simplest case, being at the Equator during Equinox, the Sun rises at 6am and sets at 6pm. It is only at the Equator that the Sun crosses the sky exactly along the EW line: [az,el]=[E or W,(SolarTime(minutes)*0.25º/minute-360], az=E=90º before noon and az=W=270º after noon. Elevation el = 0º at Solar time = 6am or 360 minutes. **A 2D map uses cos(elevation)
From here, there are two questions: How to get to a 3D model?; And, how complex could it be with latitude and inclination inputs?
Fortunately, Blender is 3D and free! It uses rectangular coordinates, [x,y,z]: x=EW, y=NS, z=height. Here is my development progression of models:
1. The Sun at the equator at equinox: [R*sin(er),0,R*cos(er)], R=radius you want to draw your sky, er=Earth rotation, 6am=90º, suggest 15 degree increments (15º=1 hour).
2. Add latitude (still at equinox): [R*sin(er),R*sin(lat),R*cos(er)*cos(lat)], use lat=abs(lat) and this will have your winter sky view facing the equator. But, this works only at the zenith, or Solar noon.
3. Add the latitude angle's EW dependency factor, cos(er), because the Sun's rays lose their NS component as the Sun moves EW: [R*sin(er),R*sin(lat)*cos(er),R*cos(er)*cos(lat)]
4. Add inclination, also called Solar declination: The solution is somewhat sophisticated and provided in a special access web page for a very low price. You also get the Python code to use in Blender, for a series of Suns across a daily Solar path. You can download Blender for free from Blender.org and cut and paste the special code into Blender's Text Editor and press 'Run Script'.
The results of the Python code were compared to SunEarthTool's and NOAA's websites. Elevations at Solar noon were very close, and the azimuths near Sunrise were off by about 2 degrees N.
*Blender basic usage:
To rotate click and hold middle mouse button.
To pan use the shift key while clicking and holding the middle mouse button.
To zoom use the mouse wheel (MW)
To select use the right mouse button (RMB)
To move the cursor use the left mouse button (LMB)
Other navigation help can be found at Blender.org.
To rerun the script, delete objects first: press A twice (it toggles between deselect/select-all) then hit the delete key.
To edit within the text editor, the mouse must be positioned over it.