Today, software application development is a combination of software development and artwork development. When creating applications that represent virtual environments, it is common for the artwork to be created using a 3D drawing tool, and then saved as a rasterized flat file, which is used as the background image of an application. The problem is that the application remains unaware of the 3D projection matrix of the image, and without further data, it can only add user interface features to a flat, 2D screen. Thus, it is difficult to organize 2D content in 3D space. Furthermore, most software applications use 2D coordinates to express the positioning of all its consumables and within this coordinate system, it is not clear how a software developer (a “technical user”) can organize its placement in a 3D environment in a way where the consumables can be organized by a person not trained in the art of 3D drawing (a “business user”). For example, a person who is not trained in the art of 3D drawing may not understand the details of how to place content into a 3D virtual environment. For the Business User to be able to place content, the Business User would need to learn how the projection matrix works and how a 3D coordinate system works and 3D tools today also require the user to be define at least one 3D rotational coordinate which requires training. It is desirable to provide a system and method that allows a business user to be able to place content in a 3D environment without having to learn 3D drawing tools, etc.
In order to create a 3D spatial application, it requires a highly qualified engineer to be intimately involved in the construction of each application. Alternatively, a business user can be trained to use programming language tools to be self sufficient, however it is a struggle for the business user to learn all the aspects of the programming language necessary to complete the task. In addition, when the technical user is assigned to create the 3D application, the workflow between the business user and technical user can be difficult because the business user usually needs to explain the requirements to the technical user and the technical user must then implement the requirement. This means that the business user is not self-sufficient and there can be subtleties lost in the translation when talking to the technical user. In today's world, the consumer (a “software customer”) who requires that a 3D application be created for them often needs software created faster than a programming team can build it due to the limited number of skilled professionals trained in the specialized art of 3D application design and development. For these additional reasons, it is desirable to provide a system and method that allows a business user to be able to place content in a 3D environment without having to learn 3D drawing tools, etc.
To further complicate the development of 3D applications, in order to position 3D elements in space, there are 6 significant variables. However, the most common input device, a mouse, can only fluidly control 2 coordinates at a time (x and y) which makes the development of 3D applications more difficult.
In the past, people have organized 2D content in 3D space by using a 3D editing tool, lining up the content so that it matches the 3D background, and placing the content on top of the 3D background. However, the 3D editing tool requires training so that a typical business user is unable to organize 2D content in 3D space using these typical techniques. The most common way for a non-technical business user to edit 3D content is for a programmer to set it up once, then the user can edit its parameters. However, the parameters are predetermined by the programmer so it is not an ideal solution.
An existing solution to position and rotate 3D elements in space is to allow motion drag on 2 dimensions at a time, then make the user rotate the camera in order to access parts of the 3rd dimension. To rotate elements in space, it is typical to put 3 circles on the screen near the object being positioned, and let the user drag each of those circles. However, this does not fully solve the problem of placing content in a 3D environment because the user has to rotate the world around to access all spatial dimensions and it requires training to use.
Another typical technique to rotate 3D elements in space is to use a 6-axis input device, known as a 3D mouse. This doesn't fully solve the problem of placing content in a 3D environment because most people don't have this input device, so only a specialized subset of people can use this device.
Currently, it takes trial and error to position a single 3D Consumable and the user has to tweak the positioning of each and every consumable that gets added. This is difficult because there are 6 variables that must simultaneously be adjusted (x, y, z, θx, θy, and θz). Therefore it fails to be practical for creating a lot of content in a short period of time. Thus, it is desirable to provide a system and method for placing content in a 3D environment wherein the user does not need to be intimately familiar with 3D tools and it is to this end that the system and method are directed.