SmartViewpointComputationLib is a C++ library to compute the best viewpoint in a 3D scene that satisfies a set of visual properties, such as size, visibility or angle of selected objects in the scene. For example, suppose you have a building floor scene like this one:
and you would like a viewpoint that shows one of the computers in the rooms, say the one in the bottom left room. Let's suppose that "monitor", "keyboard", and "mouse" are the scene entities' names of that computer parts. You then create a set of properties like:
monitor: should be entirely visible from the viewpoint
monitor: should be not occluded by other objects
monitor: should be rendered at a certain minimum size
and similarly for the other keyboard and mouse. You then ask the the library to compute a viewpoint satisfying those properties, and it will return something like this:
The available properties include objects's size, angle, occlusion, and position in the image rendered from the viewpoint (also relative position of two objects, e.g. one at the right of another).
The library does not make any assumption on the scene and objects, and only require access to the scene objects' meshes and world transformations. It can return a result within a time of your choice (e.g., a few tens of milliseconds). More time will generally increase the quality of results, especially in large and complex scenes.
The library is released under the LGPL license. We also provide, as public domain code, bindings for the Ogre open-source rendering engine. Connecting it to other rendering engines, however, requires to modify just one public-domain file (which for Ogre consists of 500 lines of code).