This is exactly correct. Spheres distortion and cuboid perspective effect are both caused by the same perspective projection properties.
One possible solution would be to split your scene in two parts:
- render background (cuboid) with perspective projection
- render spheres using orthographic projection
Another solution would be to draw everything with orthographic and modify your cuboid to be a trapezoid, so that it only looks like to be in perspective.
Having perspective and no distortions sounds mutually exclusive if you think about it. Imagine a sphere consists of 2 parts - front and rear. Now you say you need objects farther from camera to be smaller, but at the same time you say you want front and rear of sphere to be the same size - not possible. You can achieve desired effect with orthographic projection if you manually specify spheres size to be smaller when they are farther. Or alternatively you can use perspective projection and scale your spheres to be flat by depth axis (but keep the normals to preserve proper lighting)
fieldOfViewslider, notice how distorted things become the wider the field of view. - gmanTHREE.Spriteinstead: threejs.org/examples/webgl_sprites.html. If for some reason that is not acceptable, then you need to dynamically scale/rotate each sphere so it is a properly-oriented ellipsoid; the proper ellipsoid will project to a circle. That is a doable math problem. - WestLangley