> … mathematics or physics behind …
As I understand it, a skybox is usually used to simulate objects that are very far away – so far away that local movement doesn’t affect their apparent size or relative positions. The “mathematically correct” approximation here is to move the skybox exactly with the user.
For objects that are extremely far away (e.g. stars in the sky), the approximation will be essentially perfect. If you travel around the world (or to the moon and back), you can see different constellations, but their shapes and sizes don’t change at all. The closer objects are, the less good the approximation is. Still good for the sun, not as good for mountains or clouds, but probably good enough.
With a little trigonometry, you can calculate the difference between apparent (to the user) object size on the skybox (always the same), and the apparent size of the object if the user were allowed to get closer to or farther from the object. As long as that difference is small, you can build the object into a skybox without making things look bad.
If that difference is large, that objects should probably not be rendered as part of the skybox (or you will have to accept the distortion). I can’t think of a way to mathematically correct for this problem and keep to a “skybox” design.
The problem is that the skybox will contain images of objects that are (in reality) different distances from the user (e.g. clouds and the sun), so no single correction factor would be right. You could create textured-quad proxies for the objects and adjust the size and position dynamically, but you would need to do that on a per-object basis. Then it isn’t a simple skybox anymore.
EDIT: Hmm. A fixed skybox that follows the user around can’t simulate viewing constellations from anywhere in the world – if the skybox moves with the user, you would carry the southern sky to the northern hemisphere – so you would definitely need a more sophisticated model.
A fixed skybox can only simulate the local surroundings, so you would need to restrict user movement to keep them from getting too close the the nearest elements in the skybox, or travel far enough around the earth to have a different sky (but that will pass many other closer objects like mountains).
Of course, you could update the skybox dynamically (perhaps with FBO-based rendering) to adjust for large changes in user position (or time-of-day changes, or cloud movement).