Is there any resource location on how to view a 3D scene from an application or a game on multiple windows or monitors? Each window should continue drawing from where the neighbouring one left off (in the end, the result should be a mosaic of the scene).
My idea is to use a camera for each window and have a reference position and orientation for a meta-camera object that is used to correctly offset the other cameras (e.g. like in the above figure where the render targets of the two cameras reproduce the star when stitched together). Since there are quite some elements to consider (window specs, viewport properties, position-orientation of each render camera), what is the correct way to update the individual cameras considering the position and orientation of the central, meta-camera? I currently cannot make the cameras present the scene contiguously (and I am reluctant in working out the transformations without checking whether this is the actual way of doing things).
|
|
|||||
|
|
I've thought about doing this myself, so here are some of my thoughts If you're lucky, you can get a good part of the information you need from the EDID data of the screens, such as supported resolutions and physical dimensions (and hence aspect ratio). On linux read-edid and parse-edid will work just fine, provided the video driver is being nice. Unless the screens used are in a fixed, known setup, you will need user input though. So personally, I would avoid AMD's Eyefinity or nvidia's Surround because they impose restrictions on what you can do. Surround for example will only let you use screens if they support a common resolution, refresh rate and sync polarity. Eyefinity is not that strict, but different size screens of the same resolution will show the rendered image at different scales. If you were to roll your own, there is no reason you couldn't support arbitrary mixed resolutions, display sizes, orientations, and screen setups. Let the user specify how the screens are arranged (relative position, rotation; portrait/landscape, bezel width), and if you can't acquire the EDID of a screen automatically, also maximum resolution and screen size (diagonal) in inches. That gives you the basic properties you need to set up the individual cameras/their projection matrices. Now choose or let the user choose a "center" screen, this will be your camera pointing straight forward. The other screens' positions and rotations should relative to this one. To move your entire camera setup through the world, first apply the relative translation and rotation to the two other cameras, then apply the center camera's translation and rotation to all three. This will keep your peripheral cameras in the same relative position as your center camera moves. Now, usually you might just use the render target's resolution to set up the camera's screen size in the world. However, if instead you make the virtual size proportional to the individual screen's physical dimensions, content will appear at the same size on each screen, accounting for different pixel densities. To make the user input easier, I suppose you could have 3D representations of the screens and let the user manipulate their properties directly, or relative to each other. (for example, allow "hinging" the secondary screens to the center one, to make adjusting the rotation easy while maintaining the aligned bezels). Edit: As for the FOV, depending on if you use horizontal or vertical (or both, or diagonal) FOV, a screen with a wider physical size should have a proportionally wider FOV. If you also let the user specify a rough position from which they will be viewing, this eliminates guessing though and you can just calculate the viewing angles and hence FOV for each screen from that. |
|||||
|
|
There are different technologies for this, there is no standard, at least no one that i'm aware of. The multi-monitor technology from ATI is named eyefinity and it's probably the most mature technology among the ones available on the market. The eyefinity capabilities are accessible through the AMD display library SDK . Nvidia calls its multi-monitor technology nVidia Surround and there are little to none informations for the developers, there is this page that mix the surround technology with the 3D technology and i don't think that is useful at all. If you are interested in this you can try to browser and ask in the Developer Zone. |
|||
|
|
