Tool for viewing 3D objects in 3D models

Some embodiments provide a non-transitory machine-readable medium that stores a program executable by at least one processing unit of a device. The program provides a display area for viewing a 3D model that includes a plurality of three-dimensional (3D) objects. The program further provides a tool for viewing 3D objects in the 3D model. The program also determines a 3D object in the plurality of 3D objects in the 3D model to hide. The program further hides the determined 3D object in the 3D model.

BACKGROUND

In three-dimensional (3D) computer graphics, a 3D model is a collection of objects that are each represented mathematically in a 3D space (e.g., points, lines, triangles, surfaces, etc.). 3D software applications can provide a number of different tools for creating 3D models, editing 3D models, viewing 3D models, rendering images of 3D models, etc. When viewing 3D models that have objects that are partially or fully enclosed within one another, it is difficult to know which objects have other objects inside or behind them. One way to determine whether an object has another object inside or behind it is to hide the object from view. Once hidden, objects that are inside or behind the hidden object are now shown. For 3D models with a large number of objects and/or a large number of objects nested inside other objects, it can be cumbersome to iterate through the various different objects to see whether they have objects inside or behind them.

SUMMARY

In some embodiments, a non-transitory machine-readable medium stores a program executable by at least one processing unit of a device. The program provides a display area for viewing a 3D model that includes a plurality of three-dimensional (3D) objects. The program further provides a tool for viewing 3D objects in the 3D model. The program also determines a 3D object in the plurality of 3D objects in the 3D model to hide. The program further hides the determined 3D object in the 3D model.

In some embodiments, the 3D object may be a first 3D object. The program may further receive input requesting to view a 3D object in the 3D model that is behind a 3D object displayed in the display area of the tool, where the determined 3D object in the 3D model is hidden in response to receiving the input, and determine a second 3D object in the plurality of 3D objects in the 3D model to hide. In some embodiments, the program may further receive input requesting to view a 3D object behind a 3D object displayed in the display area of the tool and, in response to the request, hide the determined second 3D object in the 3D model. The input may be a first input. The program may further receive a second input requesting to view a 3D object in the 3D model that is in front of a 3D object displayed in the display area of the tool and, in response to receiving the second input, unhide the determined 3D object.

In some embodiments, the display area may be a first display area. The tool may include a second display area for focusing on 3D objects in the 3D model. Determining the 3D object in the plurality of 3D objects in the 3D model to hide may include determining a subset of the 3D objects in the 3D model that are visible within the second display area of the tool and determining a closest 3D object in the subset of the 3D objects in the 3D model as the determined 3D object in the plurality of 3D objects in the 3D model to hide.

In some embodiments, the 3D object may be a first 3D object. The program may further receive input that moves the tool from a first position in the display area to a second position in the display area and, in response to moving the tool from the first position to the second position, determine a second 3D object in the plurality of 3D objects in the 3D model to hide. The input may be a first input. The program may further receive a second input requesting to view a 3D object behind a 3D object displayed in the display area of the tool and, in response to the second input, hide the determined second 3D object in the 3D model.

In some embodiments, a method provides a display area for viewing a 3D model that includes a plurality of three-dimensional (3D) objects. The method further provides a tool for viewing 3D objects in the 3D model. The method also determines a 3D object in the plurality of 3D objects in the 3D model to hide. The method further hides the determined 3D object in the 3D model.

In some embodiments, the 3D object may be a first 3D object. The method may further receive input requesting to view a 3D object in the 3D model that is behind a 3D object displayed in the display area of the tool, where the determined 3D object in the 3D model is hidden in response to receiving the input and determine a second 3D object in the plurality of 3D objects in the 3D model to hide. The method may further receive input requesting to view a 3D object behind a 3D object displayed in the display area of the tool and, in response to the request, hide the determined second 3D object in the 3D model. The input may be a first input. The method may further receive a second input requesting to view a 3D object in the 3D model that is in front of a 3D object displayed in the display area of the tool and, in response to receiving the second input, unhide the determined 3D object.

In some embodiments, the display area may be a first display area. The tool may include a second display area for focusing on 3D objects in the 3D model. Determining the 3D object in the plurality of 3D objects in the 3D model to hide may include determining a subset of the 3D objects in the 3D model that are visible within the second display area of the tool and determining a closest 3D object in the subset of the 3D objects in the 3D model as the determined 3D object in the plurality of 3D objects in the 3D model to hide.

In some embodiments, the 3D object may be a first 3D object. The method may further receive input that moves the tool from a first position in the display area to a second position in the display area and, in response to moving the tool from the first position to the second position, determine a second 3D object in the plurality of 3D objects in the 3D model to hide. The input may be a first input. The method may further receive a second input requesting to view a 3D object behind a 3D object displayed in the display area of the tool and, in response to the second input, hide the determined second 3D object in the 3D model.

In some embodiments, a system includes a set of processing units and a non-transitory machine-readable medium that stores instructions. The instructions cause at least one processing unit to provide a display area for viewing a 3D model that includes a plurality of three-dimensional (3D) objects. The instructions further cause the at least one processing unit to provide a tool for viewing 3D objects in the 3D model. The instructions also cause the at least one processing unit to determine a 3D object in the plurality of 3D objects in the 3D model to hide. The instructions further cause the at least one processing unit to hide the determined 3D object in the 3D model.

In some embodiments, the 3D object may be a first 3D object. The instructions may further cause the at least one processing unit to receive input requesting to view a 3D object in the 3D model that is behind a 3D object displayed in the display area of the tool, where the determined 3D object in the 3D model is hidden in response to receiving the input and determine a second 3D object in the plurality of 3D objects in the 3D model to hide. The instructions may further cause the at least one processing unit to receive input requesting to view a 3D object behind a 3D object displayed in the display area of the tool and, in response to the request, hide the determined second 3D object in the 3D model. The input may be a first input. The instructions may further cause the at least one processing unit to receive a second input requesting to view a 3D object in the 3D model that is in front of a 3D object displayed in the display area of the tool and, in response to receiving the second input, unhide the determined 3D object.

In some embodiments, the display area may be a first display area. The tool may include a second display area for focusing on 3D objects in the 3D model. Determining the 3D object in the plurality of 3D objects in the 3D model to hide may include determining a subset of the 3D objects in the 3D model that are visible within the second display area of the tool and determining a closest 3D object in the subset of the 3D objects in the 3D model as the determined 3D object in the plurality of 3D objects in the 3D model to hide.

In some embodiments, the 3D object may be a first 3D object. The instructions may further cause the at least one processing unit to receive a first input that moves the tool from a first position in the display area to a second position in the display are; in response to moving the tool from the first position to the second position, determine a second 3D object in the plurality of 3D objects in the 3D model to hide; receive a second input requesting to view a 3D object behind a 3D object displayed in the display area of the tool; and, in response to the second input, hide the determined second 3D object in the 3D model.

DETAILED DESCRIPTION

Described herein are techniques for providing a tool for viewing 3D objects in a 3D model. In some embodiments, a system includes a client device and a computing system that includes an application for viewing 3D models. The client device may access the application operating on the computing system and view 3D models via the application. The application may provide a 3D viewer and a tool for viewing 3D objects in 3D models. The tool can include display area for focusing on different sections of the 3D model. A user of the client device may move the display area of the tool to focus on a particular section of the 3D model. At the particular section, the user can request to view a 3D object behind the closest currently displayed (e.g., not hidden) 3D object. In response to the request, the application hides the closest currently displayed 3D object to reveal the 3D object behind it. The user can continue to request to view 3D objects behind the closest currently displayed 3D object to “drill down” into the 3D objects in the 3D model. The user may also request to view a hidden 3D object in front of the closest currently displayed 3D object. In response to such a request, the application unhides the 3D object in front of the closest currently displayed 3D object. The use may proceed to request to view hidden 3D objects in front of the closest currently displayed 3D object to “drill up” from the 3D objects in the 3D model.

FIG. 1illustrates a system100for viewing 3D objects in a 3D model according to some embodiments. As shown, system100includes client device105and computing system115. Client device105is configured to communicate and interact with computing system115. For instance, client device105includes client application110(e.g., a web browser application, a thin client application, etc.). A user of client device105can use client application110to access and interact with application120in computing system115. For example, a user of client application110may send application120a request to view a 3D model. In response, client application110can receive from application120the requested 3D model and then display it on a display of the client device105. The user of client application110may send application120a request to enable a tool for viewing 3D objects in the 3D model. The tool can include a display area for focusing on an area of the 3D model. Once enabled, the user of client application110may provide input requesting to view a 3D object behind the closest 3D object currently displayed in the display area of the tool. The user can also provide input requesting to view a hidden 3D object in front of the closest 3D object currently displayed in the display area of the tool. The user may also move the display area of the tool to different sections of the 3D model to view 3D objects behind, or hidden 3D objects in front of, the closest 3D object currently displayed in the display area of the tool. In addition, the user may select and/or interact with 3D objects displayed within the display area of the tool.

As illustrated inFIG. 1, computing system115includes application120, rendering engine125, and 3D model storage130. 3D model storage130is configured to stored 3D models. In some embodiments, a 3D model includes a set of 3D objects. Each 3D object in the set of 3D objects is defined in a 3D space. Examples of 3D objects include points, lines, planes, surfaces, polygons, boxes, cubes, toroids, cylinders, pyramids, triangle meshes, polygon meshes, etc.

Application120is a software application operating on computing system115that is configured to provide tools for viewing 3D objects in 3D models. For example, application120may receive from client device105a request to view a 3D model. In response, application120accesses 3D model storage130, retrieves the requested 3D model, and sends the 3D model to rendering engine125and a request to render the 3D model. Once application120receives a rendered 3D model from rendering engine125, application120provides it to client device105. In some embodiments, application120provides the 3D model in a display area of a graphical user interface (GUI).

In some instances, application120receives a request from client device105to enable a tool for viewing 3D objects in the 3D model. In response to the request, application120provides the tool to client device105. As mentioned above, the tool includes its own display area that is configured to focus on different sections of the 3D model. As part of the process for enabling the tool, application120detects the current position (e.g., x, y, and z coordinates) of a virtual camera used to view the 3D model and the current position (e.g., x, y, and z coordinates) of the display area of the tool. Based on the current position of the virtual camera used to view the 3D model and the position of the display area of the tool, application120determines a 3D object in the 3D model to hide. As explained below, application120may use this determined 3D object as the 3D object to hide when application120receives from client device105a request to view a 3D object behind the closest 3D object currently displayed in the display area of the tool.

When application120receives from client device105a request to view a 3D object behind the closest 3D object currently displayed in the display area of the tool, application120hides the determined 3D object in the 3D model to hide. Next, application120adds the hidden 3D object to a list of hidden 3D objects sorted according to the order in which the 3D objects are hidden. Application120then detects the current position of the virtual camera used to view the 3D model and the position of the display area of the tool. Based on the current position of the virtual camera used to view the 3D model and the position of the display area of the tool, application120determines a next 3D object in the 3D model to hide.

Application120may receive from client device105a request to view a hidden 3D object in front of the closest 3D object currently displayed in the display area of the tool. In response, application120determines whether the list of hidden 3D objects is empty. If the list is empty, application120does nothing. If the list is not empty, application120determines a 3D object in the 3D model to unhide based on the list. For example, application120determines the most recent hidden 3D object in the list of hidden 3D objects as the 3D to unhide. Next, application120unhides the determined 3D object in the 3D model and removes the unhidden 3D object from the list hidden 3D objects.

In some cases, application120can receive from client device105a movement of the display area of the tool to a different position in order to focus on a different section of the 3D model. In response to such a request, application120unhides all the 3D objects in the list of hidden 3D objects and removes all the 3D objects from the list. Then, application120detects the current position of the virtual camera used to view the 3D model and the position of the display area of the tool. Based on the current position of the virtual camera used to view the 3D model and the position of the display area of the tool, application120determines a 3D object in the 3D model to hide. As mentioned above, application120can use this determined 3D object as the 3D object to hide when application120receives from client device105a request to view a 3D object behind the closest 3D object currently displayed in the display area of the tool.

Rendering engine125is configured to render 3D models. For instance, rendering engine125may receive from application120a 3D model and a request to render the 3D model. In response, rendering engine125renders the 3D model and sends it to application120. In some cases, rendering engine125can receive from application from application120a 3D model and a request to render certain 3D objects in the 3D model. Once rendering engine125renders those certain 3D objects, rendering engine125sends them to application120.

An example operation will now be described by reference toFIGS. 2-4. The example operation will illustrate the use of the tool for viewing 3D objects in a 3D model to hide 3D objects and reveal 3D objects behind the hidden 3D objects. The operation starts by a user of client application110sending application120a request to view a 3D model. When application120receives the request from client application110, application120accesses 3D model storage130and retrieves the requested 3D model. Then, application120sends the 3D model to rendering engine125along with a request to render the 3D model. In response to receiving the request, rendering engine125renders the 3D model and then sends it to application120. Upon receiving the rendered 3D model, application120provides it to client device105, which displays it on a display of client device105.

FIG. 2illustrates a 3D model viewer according to some embodiments. Specifically,FIG. 2illustrates a GUI200of a 3D model viewer that includes display area205and selectable user interface (UI) item210. Application120provides GUI200to client application110and client application110displays it on a display of client device105. Display area205is configured to display 3D models. Selectable UI item210is configured to enable or disable, when selected, a tool for viewing 3D objects in a 3D model displayed in display area205. As shown, in this example, display area205is displaying a 3D model215that includes four 3D objects: a rectangular cube, a rounded rectangular cube, a cylinder, and a star-shaped cylinder. For this example, the four 3D objects in 3D model215are solid. However, for purposes of simplicity and explanation, the 3D objects are shown as transparent.

Next, the user of client application110sends application120a request to enable a tool, which includes a display area for focusing on an area of a 3D model, for viewing 3D objects in the 3D model. After receiving the request, application120provides the tool to client application110.FIG. 3Aillustrates the 3D model viewer illustrated inFIG. 2and a tool300for viewing 3D objects in a 3D model according to some embodiments. As shown, tool300has been enabled, as indicated by a gray highlighting of UI item210. Tool300includes a display area305for focusing on an area of the 3D model215. At any time, the user of client application205can select and/or interact with 3D objects displayed within display area305. In this example, display area305of tool300is focusing on the rounded rectangular cube, the cylinder, and the star-shaped cylinder in the middle of the 3D model. As mentioned above, the four 3D objects in 3D model215are solid, but they are shown as transparent for purposes of simplicity and explanation.FIG. 3Billustrates how 3D model215would actually appear in display area205and display area305. As shown, only the rectangular cube in 3D model215is visible in display area205and display area305; the rounded rectangular cube, the cylinder, and the star-shaped cylinder are not be visible in display area205nor display area305.

As part of the process for enabling the tool, application120also detects the current position (e.g., x, y, and z coordinates) of a virtual camera used to view 3D model215and the current position (e.g., x, y, and z coordinates) of display area305. For the purpose of explanation, assume an axis orthogonal to display area205is projected out of display area205. For this example, the virtual camera used to view 3D model215is positioned along that axis. Based on this position of the virtual camera the position of display area305, application120determines a 3D object in 3D model215to hide.

In some embodiments, application120determines a 3D object in 3D model215to hide by first determining a subset of the 3D objects in 3D model215that are visible within display area305of tool300. To determine the subset of 3D objects in 3D model215, application120sends rendering engine125the position of the virtual camera and the position of display area305and a request to determine the 3D objects that are visible in display area305from the perspective of the position of the virtual camera. Upon receiving the request, rendering engine125assigns a unique color to each 3D object in 3D model215. Next, rendering engine125renders each 3D object in 3D model215with its assigned unique color. In some embodiments, the 3D objects in 3D model215rendered with their respective unique colors are never send to client device105. Hence, they are never displayed on display area215. Based on the render of the 3D objects in 3D model215in their assigned unique colors, rendering engine125then determines a set of unique colors that are included within display area305of tool300. For each unique color in the set of unique colors, rendering engine125includes the 3D object having the unique color in the subset of the 3D objects in 3D model215. Finally, rendering engine125sends the subset of the 3D objects in 3D model215to application120. Once application120receives the subset of the 3D objects in 3D model215, application120determines the point on a surface of a 3D object within display area305of tool300closest to the position of the virtual camera used to view 3D model215. The 3D object in the subset of the 3D objects in 3D model215that has the same color as the color of the closest point is the 3D object that application120determines as the 3D object in 3D model215to hide. In this example, application120determines that the rectangular cube is the 3D object in 3D model215to hide since it is assigned the same color as the color of the point within display area305of tool300closest to the position of the virtual camera.

The user of client application110now provides input through GUI200(e.g., a selectable UI item included in tool300; a menu item from a drop down menu, a popup menu, etc.; a scroll input from a pointing device (e.g., a mouse, touchpad, touchscreen, etc.); etc.) requesting to view a 3D object behind the closest 3D object currently displayed in display area305of tool300. Upon receiving the request, application120hides the determined 3D object in 3D model215to hide. As described above, the rectangular cube is the determined 3D object in 3D model215to hide. Application120then adds the hidden 3D object to a list of hidden 3D objects sorted according to the order in which the 3D objects are hidden. Since this is the first 3D object in 3D model215that application120has hidden, the list of hidden 3D objects contains only the rectangular cube.FIG. 4Aillustrates an example of hiding a 3D object in 3D model215using tool300according to some embodiments. As shown, display area205of GUI200is showing 3D model215after the portion of the rectangular cube in display area305is hidden to reveal the rounded rectangular cube inside the rectangular cube.

After hiding the rectangular cube, application120detects the current position of the virtual camera used to view 3D model215and the position of display area305of tool300. Based on the current position of the virtual camera and the position of display area305, application120determines a next 3D object in the 3D model to hide. Application120determines the next 3D object to hide in the same manner used to determine the first 3D object in 3D model215to hide. For this example, application120determines the rounded rectangular cube as the next 3D object in 3D model215based on the same position of the virtual camera used to view 3D model215and the same position of display area305.

Next, the user of client application110provides input through GUI200requesting to view a 3D object behind the closest 3D object currently displayed in display area305of tool300. In response, application120hides the determined 3D object in 3D model215to hide, which, in this example, is the rounded rectangular cube. Next, application120adds the hidden 3D object to the list of hidden 3D objects sorted according to the order in which the 3D objects are hidden. As the rounded rectangular cube is the second 3D object in 3D model215that application120has hidden, the rounded rectangular cube is added after the rectangular cube in the list.FIG. 4Billustrates another example of hiding a 3D object in 3D model215using tool300according to some embodiments. As illustrated, display area205of GUI200is showing 3D model215after the portion of the rounded rectangular cube in display area305is hidden. Display area305now shows within display area305the portion of the cylinder in 3D model215that is inside the rounded rectangular cube.

At this point, the user of client application110provides input through GUI200(e.g., a selectable UI item included in tool300; a menu item from a drop down menu, a popup menu, etc.; a scroll input from a pointing device (e.g., a mouse, touchpad, touchscreen, etc.); etc.) requesting to view a hidden 3D object in front of the closest 3D object currently displayed in display area305of tool300. Upon receiving this request, application120determines whether the list of hidden 3D objects is empty. If the list is empty, application120does nothing. If the list is not empty, application120determines the most recent hidden 3D object in the list of hidden 3D objects as the 3D to unhide. For this example, the list of hidden 3D objects is not empty. Therefore, application120determines that the rounded rectangular cube is the 3D object in 3D model215to unhide because it is the most recent hidden 3D object in the list of hidden 3D objects. Application120then unhides the rounded rectangular cube and removes it from the list hidden 3D objects. Once the rounded rectangular cube is unhidden, 3D model215illustrated inFIG. 4Ais what would be shown is display area205

FIG. 5illustrates an example tool500for viewing 3D objects in a 3D model according to some embodiments. In some embodiments, tool500can be used to implement tool300described above by reference toFIGS. 2-4. As shown, tool500includes display area505, UI controls510-525, and selectable UI items530and535. Display area505is configured to focus on areas of a 3D model (e.g., 3D model215). Additionally, display area505is configured to allow a user (e.g., a user of client application110) to select and/or interact with 3D objects displayed within display area505.

Each of the UI controls510-525may be configured to adjust the size of display area505. For example, a user can perform a drag and drop operation on any of the UI controls510-525using a pointing device (e.g., a mouse, touchpad, touchscreen, etc.) in order to adjust the size of display area505. In some embodiments, the aspect ratio of display area505is maintained when the size of display area505is adjusted. For instance, of display area505has an aspect ratio of 1:1, using one of the UI controls510-525to enlarge or shrink display area505will still result in a circle shape. In other embodiments, the aspect ratio of display area505is not maintained when the size of display area505is adjusted. In some such other embodiments, UI controls510-525can be used make display area505taller, shorter, wider, and thinner. In some embodiments, a user can perform a drag and drop operation on the circumference of display area505other than where UI controls510-525located to move tool500. This way, the user can move tool500to view other sections of a 3D model.

Selectable UI item530is configured to, when selected, hide the closest 3D object currently displayed in display area505. Selectable UI item535is configured to, when selected, unhide a hidden 3D object in front of the closest 3D object currently displayed in display area505. Instead of selecting UI items530and535to hide 3D objects and unhide 3D objects, other means of performing such operations can be used in some embodiments. For instance, a user may use a pointing device to hover a pointer over UI item530and perform a scroll operation (e.g., scroll up) to hide 3D objects. Similarly, a user may use a pointing device to hover a pointer over UI item535and perform a different scroll operation (e.g., scroll down) to unhide 3D objects. Other methods of input are possible.

FIG. 6illustrates a process600for viewing 3D objects in a 3D model according to some embodiments. In some embodiments, application120performs process600. Process600begins by providing, at610, a display area for viewing a 3D model comprising a plurality of three-dimensional (3D) objects. Referring toFIGS. 1 and 2as an example, application120may provide display area205for viewing 3D model215to client application110.

Next, process600provides, at620, a tool for viewing 3D objects in the 3D model. Referring toFIGS. 1 and 3as an example, application120can provide tool300for viewing 3D objects in 3D model215to client application110. Application120provides tool300in response to receiving from client application110a request to enable tool300.

Process600then determines, at630, a 3D object in the plurality of 3D objects in the 3D model to hide. Referring toFIGS. 1 and 3as an example, application120performs operation630as part of the process of enabling tool300. Application120can use the determined 3D object as the 3D object to hide when application120receives from client device105a request to view a 3D object behind the closest 3D object currently displayed in the display area of the tool.

Finally, process600hides, at640, the determined 3D object in the 3D model. Referring toFIGS. 1 and 3as an example, application120can hide the determined 3D object in the 3D model to reveal 3D objects behind and/or inside the hidden 3D object. Application120performs operation640in response to receiving from client device110input requesting to view a 3D object behind the closest 3D object currently displayed in display area305of tool300.

FIG. 7illustrates an exemplary computer system700for implementing various embodiments described above. For example, computer system700may be used to implement client device105and computing system115. Computer system700may be a desktop computer, a laptop, a server computer, or any other type of computer system or combination thereof. Some or all elements of client application110, application120, rendering engine125, or combinations thereof can be included or implemented in computer system700. In addition, computer system700can implement many of the operations, methods, and/or processes described above (e.g., process600). As shown inFIG. 7, computer system700includes processing subsystem702, which communicates, via bus subsystem726, with input/output (I/O) subsystem708, storage subsystem710and communication subsystem724.

Bus subsystem726is configured to facilitate communication among the various components and subsystems of computer system700. While bus subsystem726is illustrated inFIG. 7as a single bus, one of ordinary skill in the art will understand that bus subsystem726may be implemented as multiple buses. Bus subsystem726may be any of several types of bus structures (e.g., a memory bus or memory controller, a peripheral bus, a local bus, etc.) using any of a variety of bus architectures. Examples of bus architectures may include an Industry Standard Architecture (ISA) bus, a Micro Channel Architecture (MCA) bus, an Enhanced ISA (EISA) bus, a Video Electronics Standards Association (VESA) local bus, a Peripheral Component Interconnect (PCI) bus, a Universal Serial Bus (USB), etc.

Processing subsystem702, which can be implemented as one or more integrated circuits (e.g., a conventional microprocessor or microcontroller), controls the operation of computer system700. Processing subsystem702may include one or more processors704. Each processor704may include one processing unit706(e.g., a single core processor such as processor704-1) or several processing units706(e.g., a multicore processor such as processor704-2). In some embodiments, processors704of processing subsystem702may be implemented as independent processors while, in other embodiments, processors704of processing subsystem702may be implemented as multiple processors integrate into a single chip or multiple chips. Still, in some embodiments, processors704of processing subsystem702may be implemented as a combination of independent processors and multiple processors integrated into a single chip or multiple chips.

In some embodiments, processing subsystem702can execute a variety of programs or processes in response to program code and can maintain multiple concurrently executing programs or processes. At any given time, some or all of the program code to be executed can reside in processing subsystem702and/or in storage subsystem710. Through suitable programming, processing subsystem702can provide various functionalities, such as the functionalities described above by reference to process600.

I/O subsystem708may include any number of user interface input devices and/or user interface output devices. User interface input devices may include a keyboard, pointing devices (e.g., a mouse, a trackball, etc.), a touchpad, a touch screen incorporated into a display, a scroll wheel, a click wheel, a dial, a button, a switch, a keypad, audio input devices with voice recognition systems, microphones, image/video capture devices (e.g., webcams, image scanners, barcode readers, etc.), motion sensing devices, gesture recognition devices, eye gesture (e.g., blinking) recognition devices, biometric input devices, and/or any other types of input devices.

User interface output devices may include visual output devices (e.g., a display subsystem, indicator lights, etc.), audio output devices (e.g., speakers, headphones, etc.), etc. Examples of a display subsystem may include a cathode ray tube (CRT), a flat-panel device (e.g., a liquid crystal display (LCD), a plasma display, etc.), a projection device, a touch screen, and/or any other types of devices and mechanisms for outputting information from computer system700to a user or another device (e.g., a printer).

As illustrated inFIG. 7, storage subsystem710includes system memory712, computer-readable storage medium720, and computer-readable storage medium reader722. System memory712may be configured to store software in the form of program instructions that are loadable and executable by processing subsystem702as well as data generated during the execution of program instructions. In some embodiments, system memory712may include volatile memory (e.g., random access memory (RAM)) and/or non-volatile memory (e.g., read-only memory (ROM), programmable read-only memory (PROM), erasable programmable read-only memory (EPROM), electrically erasable programmable read-only memory (EEPROM), flash memory, etc.). System memory712may include different types of memory, such as static random access memory (SRAM) and/or dynamic random access memory (DRAM). System memory712may include a basic input/output system (BIOS), in some embodiments, that is configured to store basic routines to facilitate transferring information between elements within computer system700(e.g., during start-up). Such a BIOS may be stored in ROM (e.g., a ROM chip), flash memory, or any other type of memory that may be configured to store the BIOS.

As shown inFIG. 7, system memory712includes application programs714(e.g., application client application110or application120), program data716, and operating system (OS)718. OS718may be one of various versions of Microsoft Windows, Apple Mac OS, Apple OS X, Apple macOS, and/or Linux operating systems, a variety of commercially-available UNIX or UNIX-like operating systems (including without limitation the variety of GNU/Linux operating systems, the Google Chrome® OS, and the like) and/or mobile operating systems such as Apple iOS, Windows Phone, Windows Mobile, Android, BlackBerry OS, Blackberry 10, and Palm OS, WebOS operating systems.

Computer-readable storage medium720may be a non-transitory computer-readable medium configured to store software (e.g., programs, code modules, data constructs, instructions, etc.). Many of the components (e.g., client application110, application120, and rendering engine125) and/or processes (e.g., process600) described above may be implemented as software that when executed by a processor or processing unit (e.g., a processor or processing unit of processing subsystem702) performs the operations of such components and/or processes. Storage subsystem710may also store data used for, or generated during, the execution of the software.

Storage subsystem710may also include computer-readable storage medium reader722that is configured to communicate with computer-readable storage medium720. Together and, optionally, in combination with system memory712, computer-readable storage medium720may comprehensively represent remote, local, fixed, and/or removable storage devices plus storage media for temporarily and/or more permanently containing, storing, transmitting, and retrieving computer-readable information.

Computer-readable storage medium720may be any appropriate media known or used in the art, including storage media such as volatile, non-volatile, removable, non-removable media implemented in any method or technology for storage and/or transmission of information. Examples of such storage media includes RAM, ROM, EEPROM, flash memory or other memory technology, compact disc read-only memory (CD-ROM), digital versatile disk (DVD), Blu-ray Disc (BD), magnetic cassettes, magnetic tape, magnetic disk storage (e.g., hard disk drives), Zip drives, solid-state drives (SSD), flash memory card (e.g., secure digital (SD) cards, CompactFlash cards, etc.), USB flash drives, or any other type of computer-readable storage media or device.

Communication subsystem724serves as an interface for receiving data from, and transmitting data to, other devices, computer systems, and networks. For example, communication subsystem724may allow computer system700to connect to one or more devices via a network (e.g., a personal area network (PAN), a local area network (LAN), a storage area network (SAN), a campus area network (CAN), a metropolitan area network (MAN), a wide area network (WAN), a global area network (GAN), an intranet, the Internet, a network of any number of different types of networks, etc.). Communication subsystem724can include any number of different communication components. Examples of such components may include radio frequency (RF) transceiver components for accessing wireless voice and/or data networks (e.g., using cellular technologies such as 2G, 3G, 4G, 5G, etc., wireless data technologies such as Wi-Fi, Bluetooth, ZigBee, etc., or any combination thereof), global positioning system (GPS) receiver components, and/or other components. In some embodiments, communication subsystem724may provide components configured for wired communication (e.g., Ethernet) in addition to or instead of components configured for wireless communication.

One of ordinary skill in the art will realize that the architecture shown inFIG. 7is only an example architecture of computer system700, and that computer system700may have additional or fewer components than shown, or a different configuration of components. The various components shown inFIG. 7may be implemented in hardware, software, firmware or any combination thereof, including one or more signal processing and/or application specific integrated circuits.

FIG. 8illustrates an exemplary computing device800for implementing various embodiments described above. For example, computing device800may be used to implement client device105. Computing device800may be a cellphone, a smartphone, a wearable device, an activity tracker or manager, a tablet, a personal digital assistant (PDA), a media player, or any other type of mobile computing device or combination thereof. Some or all elements of client application110, or combinations thereof can be included or implemented in computing device800. As shown inFIG. 8, computing device800includes processing system802, input/output (I/O) system808, communication system818, and storage system820. These components may be coupled by one or more communication buses or signal lines.

Processing system802, which can be implemented as one or more integrated circuits (e.g., a conventional microprocessor or microcontroller), controls the operation of computing device800. As shown, processing system802includes one or more processors804and memory806. Processors804are configured to run or execute various software and/or sets of instructions stored in memory806to perform various functions for computing device800and to process data.

Each processor of processors804may include one processing unit (e.g., a single core processor) or several processing units (e.g., a multicore processor). In some embodiments, processors804of processing system802may be implemented as independent processors while, in other embodiments, processors804of processing system802may be implemented as multiple processors integrate into a single chip. Still, in some embodiments, processors804of processing system802may be implemented as a combination of independent processors and multiple processors integrated into a single chip.

Memory806may be configured to receive and store software (e.g., operating system822, applications824, I/O module826, communication module828, etc. from storage system820) in the form of program instructions that are loadable and executable by processors804as well as data generated during the execution of program instructions. In some embodiments, memory806may include volatile memory (e.g., random access memory (RAM)), non-volatile memory (e.g., read-only memory (ROM), programmable read-only memory (PROM), erasable programmable read-only memory (EPROM), electrically erasable programmable read-only memory (EEPROM), flash memory, etc.), or a combination thereof.

I/O system808is responsible for receiving input through various components and providing output through various components. As shown for this example, I/O system808includes display810, one or more sensors812, speaker814, and microphone816. Display810is configured to output visual information (e.g., a graphical user interface (GUI) generated and/or rendered by processors804). In some embodiments, display810is a touch screen that is configured to also receive touch-based input. Display810may be implemented using liquid crystal display (LCD) technology, light-emitting diode (LED) technology, organic LED (OLED) technology, organic electro luminescence (OEL) technology, or any other type of display technologies. Sensors812may include any number of different types of sensors for measuring a physical quantity (e.g., temperature, force, pressure, acceleration, orientation, light, radiation, etc.). Speaker814is configured to output audio information and microphone816is configured to receive audio input. One of ordinary skill in the art will appreciate that I/O system808may include any number of additional, fewer, and/or different components. For instance, I/O system808may include a keypad or keyboard for receiving input, a port for transmitting data, receiving data and/or power, and/or communicating with another device or component, an image capture component for capturing photos and/or videos, etc.

Communication system818serves as an interface for receiving data from, and transmitting data to, other devices, computer systems, and networks. For example, communication system818may allow computing device800to connect to one or more devices via a network (e.g., a personal area network (PAN), a local area network (LAN), a storage area network (SAN), a campus area network (CAN), a metropolitan area network (MAN), a wide area network (WAN), a global area network (GAN), an intranet, the Internet, a network of any number of different types of networks, etc.). Communication system818can include any number of different communication components. Examples of such components may include radio frequency (RF) transceiver components for accessing wireless voice and/or data networks (e.g., using cellular technologies such as 2G, 3G, 4G, 5G, etc., wireless data technologies such as Wi-Fi, Bluetooth, ZigBee, etc., or any combination thereof), global positioning system (GPS) receiver components, and/or other components. In some embodiments, communication system818may provide components configured for wired communication (e.g., Ethernet) in addition to or instead of components configured for wireless communication.

Storage system820handles the storage and management of data for computing device800. Storage system820may be implemented by one or more non-transitory machine-readable mediums that are configured to store software (e.g., programs, code modules, data constructs, instructions, etc.) and store data used for, or generated during, the execution of the software. Many of the components (e.g., client application110) described above may be implemented as software that when executed by a processor or processing unit (e.g., processors804of processing system802) performs the operations of such components and/or processes.

In this example, storage system820includes operating system822, one or more applications824, I/O module826, and communication module828. Operating system822includes various procedures, sets of instructions, software components and/or drivers for controlling and managing general system tasks (e.g., memory management, storage device control, power management, etc.) and facilitates communication between various hardware and software components. Operating system822may be one of various versions of Microsoft Windows, Apple Mac OS, Apple OS X, Apple macOS, and/or Linux operating systems, a variety of commercially-available UNIX or UNIX-like operating systems (including without limitation the variety of GNU/Linux operating systems, the Google Chrome® OS, and the like) and/or mobile operating systems such as Apple iOS, Windows Phone, Windows Mobile, Android, BlackBerry OS, Blackberry 10, and Palm OS, WebOS operating systems.

Applications824can include any number of different applications installed on computing device800. For example, client application110may be installed on computing device800. Other examples of such applications may include a browser application, an address book application, a contact list application, an email application, an instant messaging application, a word processing application, JAVA-enabled applications, an encryption application, a digital rights management application, a voice recognition application, location determination application, a mapping application, a music player application, etc.

I/O module826manages information received via input components (e.g., display810, sensors812, and microphone816) and information to be outputted via output components (e.g., display810and speaker814). Communication module828facilitates communication with other devices via communication system818and includes various software components for handling data received from communication system818.

One of ordinary skill in the art will realize that the architecture shown inFIG. 8is only an example architecture of computing device800, and that computing device800may have additional or fewer components than shown, or a different configuration of components. The various components shown inFIG. 8may be implemented in hardware, software, firmware or any combination thereof, including one or more signal processing and/or application specific integrated circuits.

FIG. 9illustrates an exemplary system900for implementing various embodiments described above. For example, cloud computing system912of system900may be used to implement computing system115and one of client devices902-908may be used to implement client device105. As shown, system900includes client devices902-908, one or more networks910, and cloud computing system912. Cloud computing system912is configured to provide resources and data to client devices902-908via networks910. In some embodiments, cloud computing system900provides resources to any number of different users (e.g., customers, tenants, organizations, etc.). Cloud computing system912may be implemented by one or more computer systems (e.g., servers), virtual machines operating on a computer system, or a combination thereof.

As shown, cloud computing system912includes one or more applications914, one or more services916, and one or more databases918. Cloud computing system900may provide applications914, services916, and databases918to any number of different customers in a self-service, subscription-based, elastically scalable, reliable, highly available, and secure manner.

In some embodiments, cloud computing system900may be adapted to automatically provision, manage, and track a customer's subscriptions to services offered by cloud computing system900. Cloud computing system900may provide cloud services via different deployment models. For example, cloud services may be provided under a public cloud model in which cloud computing system900is owned by an organization selling cloud services and the cloud services are made available to the general public or different industry enterprises. As another example, cloud services may be provided under a private cloud model in which cloud computing system900is operated solely for a single organization and may provide cloud services for one or more entities within the organization. The cloud services may also be provided under a community cloud model in which cloud computing system900and the cloud services provided by cloud computing system900are shared by several organizations in a related community. The cloud services may also be provided under a hybrid cloud model, which is a combination of two or more of the aforementioned different models.

In some instances, any one of applications914, services916, and databases918made available to client devices902-908via networks910from cloud computing system900is referred to as a “cloud service.” Typically, servers and systems that make up cloud computing system900are different from the on-premises servers and systems of a customer. For example, cloud computing system900may host an application and a user of one of client devices902-908may order and use the application via networks910.

Applications914may include software applications that are configured to execute on cloud computing system912(e.g., a computer system or a virtual machine operating on a computer system) and be accessed, controlled, managed, etc. via client devices902-908. In some embodiments, applications914may include server applications and/or mid-tier applications (e.g., HTTP (hypertext transport protocol) server applications, FTP (file transfer protocol) server applications, CGI (common gateway interface) server applications, JAVA server applications, etc.). Services916are software components, modules, application, etc. that are configured to execute on cloud computing system912and provide functionalities to client devices902-908via networks910. Services916may be web-based services or on-demand cloud services.

Databases918are configured to store and/or manage data that is accessed by applications914, services916, and/or client devices902-908. For instance, 3D model storage130may be stored in databases918. Databases918may reside on a non-transitory storage medium local to (and/or resident in) cloud computing system912, in a storage-area network (SAN), on a non-transitory storage medium local located remotely from cloud computing system912. In some embodiments, databases918may include relational databases that are managed by a relational database management system (RDBMS). Databases918may be a column-oriented databases, row-oriented databases, or a combination thereof. In some embodiments, some or all of databases918are in-memory databases. That is, in some such embodiments, data for databases918are stored and managed in memory (e.g., random access memory (RAM)).

Client devices902-908are configured to execute and operate a client application (e.g., a web browser, a proprietary client application, etc.) that communicates with applications914, services916, and/or databases918via networks910. This way, client devices902-908may access the various functionalities provided by applications914, services916, and databases918while applications914, services916, and databases918are operating (e.g., hosted) on cloud computing system900. Client devices902-908may be computer system700or computing device800, as described above by reference toFIGS. 7 and 8, respectively. Although system900is shown with four client devices, any number of client devices may be supported.

Networks910may be any type of network configured to facilitate data communications among client devices902-908and cloud computing system912using any of a variety of network protocols. Networks910may be a personal area network (PAN), a local area network (LAN), a storage area network (SAN), a campus area network (CAN), a metropolitan area network (MAN), a wide area network (WAN), a global area network (GAN), an intranet, the Internet, a network of any number of different types of networks, etc.