AR shopping apps (IKEA Place, Amazon View in Your Room, ARKit/ARCore product viewers) place a to-scale 3D model into your live camera feed. Two things have to line up for the object to look "really there": the phone's plane detection gives a real-world scale anchor (the floor), and the pinhole camera projection converts the object's real height into the correct number of on-screen pixels at its distance.
focal length (px): f = frameHeight / (2 · tan(FOV / 2))
apparent height: h_px = f · H_real / d
frame occupied: h_px / frameHeight
Where H_real is the product's true height in metres, d is its distance from the camera along the view axis, and FOV is the camera's vertical field of view. This is exactly why the same physical sofa looks smaller the farther back you stand, and why a wide-angle lens (larger FOV) shrinks everything at a given distance — the AR engine has to know all three numbers to draw the overlay at true scale instead of an arbitrary size.
- Real-world height — the product's true size, as stored in its catalog listing (this is what plane detection anchors the model to).
- Distance — how far the anchor point is from the camera, estimated by the phone's depth/SLAM tracking.
- Field of view — wider FOV lenses (most phone ultra-wide cameras) compress apparent size more per metre of distance.
The readouts on the left are computed live from this formula and cross-checked against the actual rendered pixel height of the 3D model — the two match, because the 3D renderer uses the same pinhole projection math under the hood.