A computer-implemented method for moving a virtual object, comprising: displaying a virtual object; moving the virtual object based on a user input; in response to the user input attempting to move the virtual object in violation of an obstacle, displaying a collision indicator and an input indicator, wherein the obstacle is a real world object or a second virtual object different from the virtual object being moved, wherein the appearance of the collision indicator matches or is derived from an appearance of the virtual object, and the input indicator differs in appearance from the appearance of the virtual object in one or more of shape, color, size, and transparency or the input indicator mimics the appearance of the virtual object; moving the collision indicator based on user input and movement constraints imposed by the obstacle, the movement constraints comprising preventing the collision indicator from passing through the obstacle or sharing three-dimensional space with the obstacle, preventing the virtual object from occupying space within a threshold distance of the obstacle, or permitting the collision indicator to move through the obstacle to a minor degree though not fully through the obstacle, and wherein the movement constraints imposed by the obstacle are relaxed as a distance between the collision indicator and the input indicator increases, the relaxed movement constraints allowing the collision indicator to partially or fully overcome the movement constraints and allowing an increasingly greater portion of the collision indicator to pass through the obstacle; and moving the input indicator based on user input without movement constraints imposed by the obstacle. displaying a virtual object; moving the virtual object based on a user input; in response to the user input attempting to move the virtual object in violation of an obstacle, displaying a collision indicator and an input indicator, wherein the obstacle is a real world object or a second virtual object different from the virtual object being moved, wherein the appearance of the collision indicator matches or is derived from an appearance of the virtual object, and the input indicator differs in appearance from the appearance of the virtual object in one or more of shape, color, size, and transparency or the input indicator mimics the appearance of the virtual object; moving the collision indicator based on user input and movement constraints imposed by the obstacle, the movement constraints comprising preventing the collision indicator from passing through the obstacle or sharing three-dimensional space with the obstacle, preventing the virtual object from occupying space within a threshold distance of the obstacle, or permitting the collision indicator to move through the obstacle to a minor degree though not fully through the obstacle, and wherein the movement constraints imposed by the obstacle are relaxed as a distance between the collision indicator and the input indicator increases, the relaxed movement constraints allowing the collision indicator to partially or fully overcome the movement constraints and allowing an increasingly greater portion of the collision indicator to pass through the obstacle; and moving the input indicator based on user input without movement constraints imposed by the obstacle.