Generation of an observer view in a virtual environment

Generation of an observer view in a virtual environment in response to real-time input during a simulation is disclosed. In one embodiment, a device initiates a simulation of a virtual environment. Core view data that identifies a core view in the virtual environment is maintained. The core view is associated with an object in the virtual environment. Core view imagery that depicts a portion of the virtual environment based on the core view data is generated. During the simulation, real-time input that includes first observer view data that identifies a first observer view in the virtual environment is received. The first observer view is unassociated with any object in the virtual environment. First observer view imagery that depicts a portion of the virtual environment based on the first observer view data is generated.

TECHNICAL FIELD

The embodiments relate generally to simulations of virtual environments, and in particular to the generation of an observer view in a virtual environment in response to real-time input during a simulation.

BACKGROUND

A simulation of a virtual environment typically presents a view of the virtual environment to a participant of the simulation. The view may be from the perspective of an object in the virtual environment that represents the participant, such as an entity that moves about the virtual environment in response to input from the participant, or the view may be from the perspective of an object in the virtual environment with which the participant is associated, such as a car, airplane, or the like.

Sometimes it is desirable to generate an additional view in the virtual environment that is not tied to an object in the virtual environment during a simulation. This may be referred to herein as an observer view. An observer view may provide a participant of the simulation a view of the virtual environment that differs from the view of the virtual environment the participant has by virtue of participating in the virtual environment.

Unfortunately, it may be difficult or impossible to know, prior to the initiation of the simulation, where in the virtual environment such an observer view may be useful. Accordingly, there is a need for flexible mechanisms for initiating observer views in a virtual environment based on real-time input received during a simulation.

SUMMARY

Embodiments herein relate to the generation of one or more observer views in a virtual environment during a simulation of the virtual environment. In one embodiment, a device initiates a simulation of a virtual environment. Core view data that identifies a core view in the virtual environment is maintained. The core view is associated with an object in the virtual environment. Core view imagery that depicts a portion of the virtual environment based on the core view data is generated. During the simulation, real-time input that includes first observer view data that identifies a first observer view in the virtual environment is received. The first observer view is unassociated with any object in the virtual environment. First observer view imagery that depicts a portion of the virtual environment based on the first observer view data is generated.

In one embodiment, the core view imagery may be displayed on a display device in a first window, and the first observer view imagery may be concurrently displayed on the display device in a second window.

In one embodiment, a simulation module may expose an application programming interface (API) that is configured to receive data for generating an observer view from an external application that is independent of and external to the simulation module. The input that includes the first observer view data that identifies the first observer view in the virtual environment may be received via the API from the external application.

In one embodiment, the device may receive, during the simulation, a plurality of different real-time inputs, each different real-time input including corresponding observer view data that may identify a corresponding observer view in the virtual environment. Each corresponding observer view may be different from each other corresponding observer view and be different from the core view. A plurality of observer view imagery may be generated, each observer view imagery corresponding to one of the corresponding observer views and depicting a portion of the virtual environment based on the corresponding observer view. The core view imagery may be displayed on a display device in a first window. The plurality of observer view imagery may be concurrently displayed on the display device, wherein each observer view imagery is displayed in a separate window on the display device.

Those skilled in the art will appreciate the scope of the embodiments and realize additional aspects thereof after reading the following description of the embodiments in association with the accompanying drawing figures.

DETAILED DESCRIPTION

FIG. 1is a block diagram of a system10in which embodiments may be practiced according to one embodiment. The system10includes a device12that is communicatively coupled to a display device14. The display device14may be a separate device from the device12, such as one or more monitors that are coupled to the device12, or may be integrated with the device12. The device12includes a simulation module16which is configured to provide a simulation of a virtual environment to one or more users18. The virtual environment may be in part or in whole defined by a virtual environment model (VEM)20that comprises one or more data structures that identify attributes of the virtual environment, such as information regarding each object in the virtual environment, including the spatial relationships of objects in the virtual environment, locations of the objects in the virtual environment, attributes and characteristics of the objects in the virtual environment, graphical information, and the like.

The VEM20may be continually updated during the simulation and reflects a current status of the virtual environment. Imagery may be generated, based on the VEM20, that depicts portions of the virtual environment and that may be displayed, by way of non-limiting example, on the display device14. In some embodiments, the device12may be coupled to a network22to facilitate communications with one or more other devices24that are concurrently involved in the simulation. Such device24may include a simulation module26which may also maintain a VEM28that may reflect the current state of the virtual environment. As the simulation progresses, the device12and the device24may exchange data that facilitates synchronization of the VEM20with the VEM28so that the users18and30of the devices12and24, respectively, may perceive substantially identical virtual environments. For example, as the user18manipulates an input device (not illustrated) to move an object in the virtual environment about the virtual environment, positional data identifying such object movements may be provided by the device12to the device24via the network22so the VEM28may be updated to correctly identify a current position of the object in the virtual environment. Accordingly, the simulation module16may render imagery to the user30substantially in real-time that depicts the movements of the object that is being manipulated by the user18. Similarly, the user30may also manipulate an object in the virtual environment, and the device24may send positional data identifying such object movements to the device12via the network22so the VEM20may be updated to correctly identify a current position of such object in the virtual environment. While for purposes of illustration only two devices are shown as participating in the simulation, any number of devices may participate in a simulation.

The VEM20may maintain data regarding a plurality of objects32-1-32-N (generally, objects32) that are part of the virtual environment. An object32may represent any entity or thing that is part of the virtual environment, such as, by way of non-limiting example, a vehicle, a tree, or an animal. Typically, each human participant in the simulation may be represented as an object in the virtual environment, and may be a particular type of object based on the particular simulation, such as a human object, a car object, or the like.

All or some of the plurality of objects32-1-32-N may have associated core view data34-1-34-N (generally, core view data34) that may identify a core view in the virtual environment. The core view data34may comprise, for example, information that identifies a portion of the virtual environment, such as a volume in the virtual environment, that may be perceivable by the corresponding object32. The core view data34may include, by way of non-limiting example, a location identifier that identifies a location within the virtual environment, a view direction identifier that identifies a view direction in the virtual environment with respect to the location, a horizontal field-of-view (FOV) identifier that identifies a horizontal FOV, and a vertical FOV identifier that identifies a vertical FOV.

The simulation module16may render core view imagery for display on the display device14based on the core view data34. For example, assume that the user18is represented in the virtual environment by the object32-1. The object32-1may comprise, by way of non-limiting example, a simulated human in the virtual environment. Thus, as the user18manipulates an input device, such as a keyboard, joystick, or other input device, the simulation module16may translate such manipulations into movements of the object32-1in the virtual environment. The simulation module16, based on the core view data34-1, may render, or may otherwise generate, imagery, referred to herein as core view imagery to distinguish such imagery from observer view imagery discussed below, and may display core view imagery36in a first window38on the display device14. The core view imagery36may depict the portion of the virtual environment that is within the core view defined by the core view data34-1. As the user18manipulates the input device, such manipulations may change the location of the object32-1in the virtual environment, and/or the view direction of the object32-1, and thus, the core view data34-1may change in accordance with such manipulations. The simulation module16may continually render new imagery based on the updated core view data34-1, providing the user18a real-time view of the virtual environment that changes in response to manipulations of the object32-1.

As will be discussed in greater detail herein, the simulation module16may also maintain one or more observer views40-1-40-N (generally, observer views40), each of which is identified via corresponding observer view data42-1-42-N (generally, observer view data42). An observer view40, in contrast to a core view, is unassociated with any object32in the virtual environment. The observer view data42may include information such as, by way of non-limiting example, an observer view location identifier that identifies a location within the virtual environment, a view direction identifier that identifies a view direction in the virtual environment with respect to the location, a horizontal field-of-view identifier that identifies a horizontal field-of-view, and a vertical field-of-view identifier that identifies a vertical field-of-view.

The observer views40may be generated in response to real-time input received during the simulation. Such information may be received, for example, via real-time input entered by a user, such as the user18. In some embodiments, the simulation module16may interact with one or more external applications44, and may receive real-time input that may include observer view data from such external application44. The phrase “external application” is used herein to refer to a process that may execute in conjunction with a processor, and is initiated separately from and independent of the simulation module16. The external application44may execute on the same device12as the simulation module16, or, as will be described in greater detail herein, may execute on a different device that is communicatively coupled to the device12.

In one embodiment, the simulation module16may interact with the external application44by exposing to the external application44an application programming interface (API)46that is configured to receive data for generating an observer view40. Thus, during runtime, the external application44may interface with the simulation module16via the API46and interact with the simulation module16to generate, define, update, and/or delete one or more observer views40. It should be noted that the embodiments are not limited to the use of an API, and other inter-process communication mechanisms may be used.

The simulation module16may generate observer view imagery that depicts a portion of the virtual environment that is within the observer view40defined by the corresponding observer view data42. For example, observer view imagery48associated with the observer view40-1may be displayed in a second window50on the display device14. Observer view imagery52associated with the observer view40-N may be displayed in a third window54on the display device14. Notably, the core view imagery36, observer view imagery48, and observer view imagery52may all be concurrently displayed on the display device14, such that the user18has three simultaneous, different views of the virtual environment.

FIG. 2is a plan view of a representation of a virtual environment56at a particular instant in time according to one embodiment. While for purposes of illustration the virtual environment56is shown in two-dimensions, the virtual environment56is, in one embodiment, a three-dimensional virtual environment56, and thus, the objects32may have locations identified with respect to a three-dimensional coordinate system. The virtual environment56is defined, as discussed previously, by the VEM20(FIG. 1). The virtual environment56may include a plurality of objects32,32-1-32-N. Certain of the objects32, such as the object32-1, may have associated core view data34-1(FIG. 1) that identifies a corresponding core view58-1in the virtual environment56. For purposes of illustration, the portion of the virtual environment56within the core view58-1is identified via dashed lines. Accordingly, the object32-1can “see” the objects32-2-32-5, but not the object32-N, or other objects32that are not within the core view58-1.

FIG. 2also illustrates an observer view40-1, shown via dashed lines. The observer view40-1originates from a location60and extends in a direction62. Thus, at the instant in time illustrated byFIG. 2, the objects32-1and32-5are within the observer view40-1, and observer view imagery depicting the observer view40-1would depict the current state of the objects32-1and32-5. Notably, the location60is within the core view58-1of the object32-1, but core view imagery depicting the core view58-1does not depict the observer view40-1or any other information regarding the observer view40-1, because the observer view40-1is unassociated with any object32in the virtual environment56and thus is not perceivable by the object32-1.

A core view58and an observer view40may be defined in any desirable manner, and in some embodiments, the same type of information may be used to define either a core view58or an observer view40. In one embodiment, a core view58and an observer view40may be defined via a view frustum.

FIG. 3is a block diagram illustrating a view frustum64according to one embodiment, and a plurality of objects32-A-32-F in the virtual environment56. The view frustum64originates from a location66that is identified by an observer view location identifier. The location66is typically a particular location in the virtual environment56. For a core view58, the location is associated with a corresponding object32. For an observer view40, the location is unassociated with any object32in the virtual environment56.

The view frustum64may extend in a view direction68, which may be defined by a view direction identifier. The view frustum64may include a near plane70, a far plane72, and top, right, bottom, and left planes74that define a volume of the virtual environment56. The top, right, bottom, and left planes74may be defined, for example, via a horizontal field of view (FOV)76which is identified by a horizontal FOV identifier and a vertical FOV78which is identified by a vertical FOV identifier. The horizontal FOV identifier and the vertical FOV identifier may define the respective FOVs in terms of degrees, for example. For a core view58, the view frustum64may be identified in the corresponding core view data34. For an observer view40, the view frustum64may be identified in the corresponding observer view data42.

In one embodiment, in operation, to generate and display core view imagery associated with a core view58, the simulation module16accesses the core view data34, intersects the VEM20with the view frustum defined by the core view data34, and that portion of the virtual environment that, according to the VEM20is within the volume of the view frustum, may be rendered and displayed. In this example, at a particular instance in time, that portion of the virtual environment may include objects32-A-32-F. This process may be repeated many times each second so that changes in the virtual environment may be displayed substantially in real-time as such changes occur. The process may be similar for displaying observer view imagery associated with an observer view40.

FIG. 4is a flowchart of a process for generating an observer view in a virtual environment in response to real-time input during a simulation according to one embodiment.FIG. 4will be discussed in conjunction withFIG. 1. The device12initiates a simulation of the virtual environment by, for example, initiating the simulation module16(FIG. 4, step1000). During the simulation, the simulation module16maintains the core view data34that identifies a core view in the virtual environment (FIG. 4, step1002). The core view is associated with an object32in the virtual environment. The device12generates core view imagery36that depicts a portion of the virtual environment based on the core view data34(FIG. 4, step1004). The device12may receive, during the simulation, real-time input that includes first observer view data42-1that identifies a first observer view40-1in the virtual environment (FIG. 4, step1006). The first observer view40-1is unassociated with any object32in the virtual environment.

As discussed above, the real-time input may come, for example, from the user18. In one embodiment, the user18may enter such real-time input into the external application44, which may provide the observer view data42-1to the simulation module16via the API46. The device12may generate observer view imagery48that depicts a portion of the virtual environment based on the observer view data42-1(FIG. 4, step1008).

The device12may display the core view imagery36in a first window38and concurrently display the observer view imagery48in the second window50. In one embodiment, the first observer view data42-1may include a location identifier that identifies a location within the virtual environment, a view direction identifier that identifies a view direction in the virtual environment, a horizontal FOV identifier that identifies a horizontal FOV and a vertical FOV identifier that identifies a vertical FOV.

In one embodiment, the user18may provide updated real-time input that alters one or more of the observer view data42-1. The external application44may provide the updated real-time input via the API46to the simulation module16. For example, the updated real-time input may include a different observer view location identifier that differs from the first observer view location identifier provided by the user18. In response to receiving the updated observer view location identifier, the device12may alter the observer view40-1based on the second observer view location identifier to generate an altered observer view40-1. The device12may generate new observer view imagery48that may depict a second portion of the virtual environment based on the updated observer view data42-1.

FIG. 5is a block diagram of the system10according to another embodiment. In this embodiment, a device80may be communicatively coupled to the device12via the network22. The device80may include an external application82. The external application82is independent of and external to the simulation module16, but may be capable of communicating with, or interacting with, the simulation module16via the API46. In one embodiment, the external application82may offer a user interface (not illustrated) to a user84of the device80. The user84may enter via the user interface real-time input that includes observer view data86that identifies an observer view in the virtual environment. The observer view data86may include, for example, an observer view location identifier (ID)88that identifies a location within the virtual environment, a view direction ID90that identifies a view direction in the virtual environment with respect to the location, a horizontal FOV ID92that identifies a horizontal FOV, and a vertical FOV ID94that identifies a vertical FOV.

The API46may comprise any one or more function calls, method invocations, or other functional programming modules for defining, modifying and deleting an observer view. In one embodiment, the API46may include the following functions:DefineProcess( ):Invocation of this function by the external application82may set an indented thread that processes subsequent API46calls by the external application82;OpenConnection( ):Invocation of this function by the external application82may close the connection to the simulation module16;InitializeClientEventHandler( ):Invocation of this function by the external application82may initiate an event handler via which the external application82may receive system events;OnReceiveOpen( ):This function may be invoked when the external application82connects to the simulation module16;OnReceiveQuit( ):This function may be invoked when the simulation module16exits or otherwise terminates;OnReceiveObserverData( ):This function may provide the external application82a data structure that defines a respective observer view;CreateObserver( ):Invocation of this function by the external application82may create an observer view;RequestObserverData( ):Invocation of this function by the external application82may result in the receipt of the observer view data associated with an identified observer view;MoveObserver( ):Invocation of this function by the external application82may result in the movement of the observer view a predetermined distance;RotateObserver( ):Invocation of this function by the external application82may result in the rotation of the observer view a predetermined amount;SetObserverPosition( ):Invocation of this function by the external application82may set the location of the observer view in the virtual environment;SetObserverRotation( ):Invocation of this function by the external application82may set a rotation of the observer view in the virtual environment;SetObserverLookAt( ):Invocation of this function by the external application82may set an angle of the observer view;SetObserverFieldOfView( ):Invocation of this function by the external application82may set a FOV of the observer view;SetObserverStepSize( ):Invocation of this function by the external application82may set the distance of a “step” of the observer view in response to a user manipulation of an input device;SetObserverFocalLength( ):Invocation of this function by the external application82may set the focus of the observer view;SetObserverFocusFixed( ):Invocation of this function by the external application82may set whether focus of the observer view is fixed or relative;SetObserverRegime( ):Invocation of this function by the external application82may set whether the observer view may view through water/land;SetObserverZoomLevels( ):Invocation of this function by the external application82may set a zoom level of the observer view.In some embodiments, data that may be utilized to construct an observer view includes:Position (Latitude, Longitude, Altitude, or X, Y, Z)Target (Position)Rotation (Yaw, Pitch, Roll)LeftVector (Vector)RightVector (Vector)UpVector (Vector)ForwardVector (Vector)RelativeAxes (Position)RotationOrigin (Position)RotationAxes (Position)Regime (Enumeration)FocusType (Enumeration)Pitch (Float)FocalLength (Float)HorizontalFieldOfView (Float)VerticalFieldOfView (Float)AspectRatio (Float)ZoomLevel (Float)MaxZoomLevel (Float)ZoomTable (Structure)InfiniteFocus (Boolean)CheckElevation (Boolean)RecomputeTarget (Boolean)

The external application82provides the observer view data86to the API46of the simulation module16via the network22. The simulation module16, in response to receiving the observer view data86, may generate an observer view96based on the observer view data86. The simulation module16may then generate observer view imagery98that depicts a portion of the virtual environment based on the observer view data86. Notably, the user18now has an additional view of the virtual environment based on real-time input provided by the user84at a device that is communicatively coupled to the device12.

The user84may also provide updated real-time information that alters the observer view96. For example, the user84may provide real-time input that includes a second observer view location identifier that identifies a second location in the virtual environment that differs from the location identified by the observer view location ID88. The observer view data86may be updated with the second observer view location identifier, and any other updated information. The simulation module16then alters the observer view96based on the second observer view location identifier to generate altered observer view imagery98. The altered observer view imagery98depicts a second portion of the virtual environment based on the updated observer view data86.

The user18, or the user84, may also provide real-time input to generate one or more additional observer views. For example, the user18may provide real-time input to the external application44that may include observer view data99such as an observer view location identifier that identifies a location within the virtual environment, a view direction identifier that identifies a view direction in the virtual environment, a horizontal FOV identifier that identifies a horizontal FOV, and a vertical FOV identifier that identifies a vertical FOV. The external application44may provide the observer view data99to the API46of the simulation module16. The simulation module16, in response to receiving the observer view data99, generates an observer view100based on the observer view data99received from the external application44. The simulation module16may then generate observer view imagery104that depicts a portion of the virtual environment based on the observer view data99. Note that the observer view imagery104may depict a different portion of the virtual environment than both the observer view imagery98and the core view imagery36. Thus, the simulation module16may receive, during the simulation, a plurality of different real-time inputs, each different real-time input including corresponding observer view data that identifies a corresponding observer view in the virtual environment. Each corresponding observer view may be different from each other corresponding observer view and may be different from the core view. While for purposes of illustration only two observer views are discussed, the user18or user84may be able to establish any number of observer views for presentation on the display device14. As the number of observer views increases, the size of the windows, such as the windows38,50,54, and any additional windows, may decrease to fit the additional observer views in the area available on the display device14.

FIG. 6is a flowchart illustrating parallel processing of the simulation module16and the external application82according to one embodiment.FIG. 6will be discussed in conjunction withFIG. 5. Initially, the simulation module16may initialize in order to provide a simulation of the virtual environment (FIG. 6, block2000). In conjunction with the initiation of the simulation module16, the simulation module16may expose entry points of the simulation module16, such as via the API46, to external applications (FIG. 6, block2002). At some later point in time the external application82may initiate on the device80(FIG. 6, block2004). The external application82may connect to the entry points of the API46(FIG. 6, block2006). The external application82, perhaps in response to real-time input from the user84, may send observer view data86to the simulation module16via the API46(FIG. 6, block2008). In response to receiving the observer view data86, the simulation module16may generate the observer view96(FIG. 6, block2010). During the simulation, the external application82may send updated observer view data86based on user input from the user84(FIG. 6, block2012). The simulation module16may receive the updated observer view data86and update the observer view96based on the received updated observer view data86(FIG. 6, block2014). The simulation module16continually updates the observer view imagery98based on the current state of the observer view data86. The process described with respect to blocks2012and2014may occur repeatedly over a period of time during the simulation. At some point in time, the external application82may send a delete observer view message to the simulation module16(FIG. 6, block2016). In response to receiving the delete observer view message, the simulation module16deletes the observer view96(FIG. 6, block2018).

FIG. 7is a diagram of a user interface106via which a user may enter observer view data for defining an observer view according to one embodiment.FIG. 7will be discussed in conjunction withFIG. 5. The user interface106may be offered by one or more of the simulation module16, the external application44, or the external application82. The user interface106may include an observer view name field108via which a user can provide a name to which the observer view may be referred. Latitude, longitude, and altitude fields110,112, and114may allow the user to provide a location of the observer view, and thus, collectively may comprise an observer view location identifier that identifies a location of the observer view within the virtual environment. Heading, pitch, and bank fields116,118, and120may allow the user to provide a direction, or orientation, in the virtual environment with respect to the location identified by the latitude, longitude, and altitude fields110,112, and114, and thus, collectively comprise a view direction identifier that identifies a view direction in the virtual environment with respect to the location.

A focal length field122may allow the user to provide a particular focal length of the observer view. A drop down list124may allow the user to select a particular type of observer view imagery from a list of potential types of observer view imagery that could be generated, such as infrared (IR) imagery, non-IR imagery, colored imagery, black and white imagery, and the like. A horizontal FOV field126may allow the user to define a desired horizontal FOV identifier that identifies a desired horizontal FOV. A vertical FOV field128may allow the user to define a desired vertical FOV identifier that identifies a desired vertical FOV. In some embodiments, particular manipulations of an input device by the user, such as the depression of a particular key on a keyboard, may be translated as a movement of the observer view in the virtual environment. A linear step size field130may allow the user to identify, for each such discrete manipulation by the user, an amount of movement of the observer view in the virtual environment. Thus, for purposes of illustration, assume that an “Up Arrow” key on an input keyboard is mapped to a forward linear movement of the observer view in the virtual environment, and a “Down Arrow” key is mapped to a reverse linear movement of the observer view in the virtual environment. In this example, a single depression of the Up Arrow key by the user would translate into a 1 meter forward movement of the observer view in the virtual environment. Thus, repeated depressions of the Up Arrow key would result in successive 1 meter forward movements of the observer view. A single depression of the Down Arrow key by the user would translate into a 1 meter reverse movement of the observer view in the virtual environment. Thus, repeated depressions of the Down Arrow key would result in successive 1 meter reverse movements of the observer view.

An angular step size field132may allow the user to identify, for each such discrete manipulation by the user, an amount of angular movement of the observer view in the virtual environment. Assume further for purposes of illustration that a “Left Arrow” key is mapped to a left angular movement of the observer view in the virtual environment, and a “Right Arrow” key is mapped to a right angular movement of the observer view in the virtual environment. In this example, a single depression of the Left Arrow key by the user would translate into a 3 degree rotation of the observer view to the left. Repeated depressions of the Left Arrow key would result in successive 3 degree rotations of the observer view to the left. A single depression of the Right Arrow key by the user would translate into a 3 degree rotation of the observer view to the right. Repeated depressions of the Right Arrow key would result in successive 3 degree rotations of the observer view to the right.

While for purposes of illustration particular keys on a keyboard have been discussed as being associated with movements of the observer view within the virtual environment, it will be understood that any keys may be mapped to a desired movement or rotation of the observer view within the virtual environment, and indeed any input device, such as a mouse, a joystick, a wireless motion controller comprising an accelerometer, or the like, may be used to manipulate the observer view within the virtual environment.

As mentioned previously, any number of observer views in the virtual environment may be established.FIG. 8is a diagram of an observer view management user interface140which may be used by a user to manage multiple observer views that have been established in the virtual environment according to one embodiment. The user interface140may be offered by one or more of the simulation module16, the external application44, or the external application82. A scroll list142may allow the user to scroll through multiple observer views based on observer view names provided, for example, by a user in the observer view name field108(FIG. 7) when establishing the respective observer view. Assume for purposes of illustration that the user has selected the observer view identified by a particular observer view name144. Upon selection of the particular observer view name144, the observer view management user interface140may provide in an observer view data area145attributes of the selected observer view, such as the current position, or location, of the observer view in the virtual environment, the current heading, or direction, of the observer view in the virtual environment, the current horizontal and vertical FOVs, respectively, the linear and angular step sizes, focal length, and the like. The user may edit any one more of these attributes by selecting respective Edit buttons146that are located adjacent to such information.

The user may be able to delete one or more observer views by selecting a particular observer view name identified in the scroll list142, and activating a Delete Observer View button148. If the observer view management user interface140is being offered by an external application, upon receipt of the selection of the Delete Observer View button148, the observer view management user interface140may generate a delete observer view message identifying the respective observer view, and send the delete observer view message to the simulation module16. The simulation module16may then delete the respective observer view.

The user may also be able to create one or more observer views by selecting a Create Observer View button150. Upon selecting the Create Observer View button150, an additional user interface window, such as the user interface106illustrated inFIG. 7may be provided to the user to allow the user to create a new observer view in the virtual environment.

FIG. 9is a block diagram of a device12according to one embodiment. The device12may comprise any computing or processing device capable of executing software instructions to implement the functionality described herein, such as a work station, a desktop or laptop computer, a tablet computer, or the like. The device12includes a processor151, a system memory152, and a system bus154. The system bus154provides an interface for system components including, but not limited to, the system memory152and the processor151. The processor151can be any commercially available or proprietary processor. Dual microprocessors and other multi-processor architectures may also be employed as the processor151.

The system bus154may be any of several types of bus structures that may further interconnect to a memory bus (with or without a memory controller), a peripheral bus, and/or a local bus using any of a variety of commercially available bus architectures. The system memory152may include non-volatile memory156(e.g., read only memory (ROM), erasable programmable read only memory (EPROM), electrically erasable programmable read only memory (EEPROM), etc.) and/or volatile memory158(e.g., random access memory (RAM)). A basic input/output system (BIOS)160may be stored in the non-volatile memory156, and can include the basic routines that help to transfer information between elements within the device12. The volatile memory158may also include a high-speed RAM, such as static RAM, for caching data.

The device12may further include a computer-readable storage device161, which may comprise, for example, an internal hard disk drive (HDD) (for example, an enhanced integrated drive electronics (EIDE) HDD or serial advanced technology attachment (SATA) HDD), a flash memory, or the like. The computer-readable storage device161and other drives, sometimes referred to as computer-readable or computer-usable media, provide non-volatile storage of data, data structures, computer-executable instructions, and the like. Although for purposes of illustration the description of the computer-readable storage device161above refers to a HDD, it should be appreciated by those skilled in the art that other types of media which are readable by a computer, such as Zip disks, magnetic cassettes, flash memory cards, cartridges, and the like, may also be used in the operating environment, and further, that any such media may contain computer-executable instructions for performing novel functionality as disclosed herein.

A number of modules can be stored in the computer-readable storage device161and in the volatile memory158, including an operating system module162and one or more program modules164, which may implement the functionality described herein in whole or in part, including, for example, functionality associated with the simulation module16, the API46, and the external application44. It is to be appreciated that the embodiments can be implemented with various commercially available operating system modules162or combinations of operating system modules162.

All or a portion of the embodiments may be implemented as a computer program product stored on a non-transitory computer-usable or computer-readable storage medium, such as the computer-readable storage device161, which includes complex programming instructions, such as complex computer-readable program code, configured to cause the processor151to carry out the functionality described herein. Thus, the computer-readable program code can comprise software instructions for implementing the functionality of the embodiments described herein when executed on the processor151. The processor151, in conjunction with the program modules164in the volatile memory158, may serve as a control system for the device12that is configured to, or adapted to, implement the functionality described herein.

A user may be able to enter commands and information into the device12through one or more input devices, such as, for example, a keyboard (not illustrated), a pointing device such as a mouse (not illustrated), a touch-sensitive surface (not illustrated), or the like. Other input devices may include a microphone, an infrared (IR) remote control, a joystick, a game pad, a stylus pen, or the like. These and other input devices may be connected to the processor151through an input device interface166that is coupled to the system bus154, but can be connected by other interfaces such as a parallel port, an Institute of Electrical and Electronic Engineers (IEEE) 1394 serial port, a Universal Serial Bus (USB) port, an IR interface, and the like.

The device12may also include a communication interface168suitable for communicating with the network22. The device12may also include a video port170interfacing with the display device14that provides information to the user18.

Those skilled in the art will recognize improvements and modifications to the embodiments. All such improvements and modifications are considered within the scope of the concepts disclosed herein and the claims that follow.