A computer implemented method for interactively editing a three-dimensional model of a real world subject, the method comprising: receiving a collection of digital photos, the photos being taken from different positions relative to the real world subject; analyzing the photos to extract features of the real world subject in the photos; identifying features common to overlapping photos; using the features common to overlapping photos to determine virtual cameras for the respective photos, wherein the virtual camera of a photo lies on a line normal to the photo and at a distance corresponding to the respective focal length; using the photos and the determined virtual cameras to generate a point cloud of features, wherein the points are an estimation of the location of the respective features of the subject in three-dimensional space; generating a three-dimensional model of the real-world subject based on the point cloud, the virtual cameras and the photos; using points in the point cloud in the photos as constraints for fitting a plane of the three-dimensional model, wherein the plane is selected from different candidate planes, each candidate plane having a number of points in the point cloud associated with said candidate plane and constrained to lie on said candidate plane; rendering and displaying the three-dimensional model and the plane of the three-dimensional model with photos being projected on the plane of the three-dimensional model; adjusting the orientation and/or position of the plane within the three-dimensional model according to user input, wherein the adjusting comprises automatically snapping the plane to various orientations and/or positions based on the point cloud or constraints derived from the point cloud; as the orientation and/or position of the plane is adjusted within the three-dimensional model, re-computing projections of the digital photos from their respective virtual cameras onto the three-dimensional model and the plane thereof. receiving a collection of digital photos, the photos being taken from different positions relative to the real world subject; analyzing the photos to extract features of the real world subject in the photos; identifying features common to overlapping photos; using the features common to overlapping photos to determine virtual cameras for the respective photos, wherein the virtual camera of a photo lies on a line normal to the photo and at a distance corresponding to the respective focal length; using the photos and the determined virtual cameras to generate a point cloud of features, wherein the points are an estimation of the location of the respective features of the subject in three-dimensional space; generating a three-dimensional model of the real-world subject based on the point cloud, the virtual cameras and the photos; using points in the point cloud in the photos as constraints for fitting a plane of the three-dimensional model, wherein the plane is selected from different candidate planes, each candidate plane having a number of points in the point cloud associated with said candidate plane and constrained to lie on said candidate plane; rendering and displaying the three-dimensional model and the plane of the three-dimensional model with photos being projected on the plane of the three-dimensional model; adjusting the orientation and/or position of the plane within the three-dimensional model according to user input, wherein the adjusting comprises automatically snapping the plane to various orientations and/or positions based on the point cloud or constraints derived from the point cloud; as the orientation and/or position of the plane is adjusted within the three-dimensional model, re-computing projections of the digital photos from their respective virtual cameras onto the three-dimensional model and the plane thereof.