Yes, it should be circular. Doesn't look quite circular to me. Not sure why. It might be an error in the way aspect ratio is implemented.
Try this version of Adrian's snippet. (You may need to reduce the number of cubes on slower systems.)
sync on : sync rate 100 : autocam off : hide mouse
backdrop on : color backdrop 0
ink rgb(255,0,250),0 : box 0,0,24,16 : get image 1,0,0,24,16
color backdrop rgb(25,0,0)
position camera 0,100,0
point camera 0,0,0
for obj = 1 to 20000 ` reduce this number if necessary
make object cube obj,10
x# = rnd(600)-300
y# = rnd(600)-300
z# = rnd(600)-300
s# = 500.0/sqrt(x#*x#+y#*y#+z#*z#)
position object obj, x#*s#, 100+y#*s#, z#*s# ` place the objects on a sphere centred at the camera
next obj
set camera range 1,1000
fog on
fog distance 250,450
fog color rgb(25,0,0)
repeat
control camera using arrowkeys 0,0,1
sync
until inkey$()=chr$(27)
Typical screenshot:
Edit I'm not convinced that the oval shape is genuine. Further investigation suggests that the
control camera using arrowkeys command has an unexpected effect on camera orientation, even if you don't press any keys, which might be part of the problem. When I change the demo to fix that the oval shape becomes circular.
Edit2 Correction - it IS oval and it's nothing to do with fog. Try the following and measure the sphere before touching any keys. It seems the default camera aspect ratio is incorrect - on my laptop at least. I would expect it to be calculated from the computer's display dimensions.
The same snippet illustrates the camera orientation problem - press "c" to activate the control camera command and the camera's orientation suddenly changes - look at the displayed info (and also the sphere is instantly out of view). This feature ought to be mentioned in the Help file.
sync on : sync rate 60 : autocam off
color backdrop rgb(25,0,0)
position camera 0,100,0
point camera 0,0,0
make object sphere 1, 50, 40, 40
position object 1, 0, 0, 0
repeat
text 20, 20, "cam angle XYZ ="+str$(camera angle x(), 1)+" "+str$(camera angle y(), 1)+" "+str$(camera angle z(), 1)
text 20, 40, "cam pos XYZ ="+str$(camera position x(), 1)+" "+str$(camera position y(), 1)+" "+str$(camera position z(), 1)
if inkey$()="c" then control camera using arrowkeys 0,0,1
sync
until spacekey()