Matthew Tippett wrote:
Thanks.

I guess the frustum calculation is possibly the most difficult part
(at least investing some more effort) and dusting off the maths.

Yeah, I know. There is a project called Projection Designer http://orihalcon.jp/projdesigner/ which tries to automate these calculations for a variety of projection geometries and deals with other stuff like compensating for brightness differences caused by overlapping projectors. However, it hasn't seen any action in the last year. I've thought that a similar program for based on OpenSceneGraph would generate a huge amount of interest and fill a need.

With the original shear code that you implemented first there did
appear to be a project of some sort - the far left and right screens
exhibit a level of perspective or distortion.  I'll see if I can
provide a camera layout that demonstrates it.
That's just the normal distortion you see in a wide-angle frustum.

How many monitors do you have (so I can see if I can demonstrate that way).
1, unfortunately :)

I am guessing that I am missing something on the projection side.  My
mental model says that if the screen is not perpendicular to my eye, I
need to somehow encode that.

Attached is a somewhat stupid diagram of one screen that is not symmetric with respect to the eye point. The black dot is the eye point; the line with the arrow is normal to the screen and is considered the viewing direction. The other rays project from the eye point into the scene "behind" the screen. This isn't different from the situation with a big symmetric screen, except we've taken a very small chunk of the field of view and are drawing it on one screen. The rendered scene will look correct from the eye point, but will of course be distorted if you look at the screen head-on. This distortion wastes resolution, which is why you would turn a screen off to the side to face the viewer. It will also be less distorted and thus look more normal to observers who aren't right at the designated eye point.
Unfortunately with the standard multiple monitor stands (2x2) you have
some the screens at about 170 degrees to each other - not quite flat.
I'll see if I can get something in blender to suit to show what I am
using.

Even a simple 2x2 layout doesn't quite sit too well at the moment -
I'll send some photos later.

If you can get some measurements of the corners of the monitors with respect to the eye, then I can show you how to derive the view and frustum specification.

One thing that's a bit more complicated than it needs to be is that the view direction is specified as heading-pitch-roll and the frustum then described as a near-plane value and 2D coordinates in the coordinate frame of the view direction. It would be more convenient for multi-screen setups to accept the 3D coordinates of the screen corners directly and calculate the view direction and frustum from those.

Tim

Regards... Matthew


On 11/26/08, Tim Moore <[EMAIL PROTECTED]> wrote:
Matthew Tippett wrote:
Hi,

I have been wrestling with this for a few weeks now.  As some of you are
aware, I am slowly preparing a new multi-head demo with around 8 GPUs in
it (so up to 16 heads).

The new camera support is great, but there are some problems with the
way the frustums work.

My understanding is that the fundamental controls are for a direction
for the camera.  With large numbers of monitors this begins to fall
apart.  The view frustums will overlap when you don't create an offset
and begin to creat monitors in both the horizontal and vertical
directions.  With offsets you will have to stack the views on top of
each other and in theory get the bottom of one frustum to align with the
other, but then you end up having visual issues since the cameras are
separate.

So what I would like to be able to do is take the layout of the cameras,
determine their angles to the camera, and define a frustum that has a
non-orthogonal face.
You can't have a frustum with a non-orthogonal face unless you render to a
texture and project it, which we don't do. Actually, you don't want to do
that
unless you're projecting the image unto a screen. OSG does have some builtin
support for rendering on domes and such, but I digress.

What you need to do for each screen is determine the direction from the
eye-point to the plane containing the screen and encode that in the <view>
parameters of the camera for that screen. Then you need to determine the
frustum
dimensions, which don't need to be symmetric, that place the screen properly
in
that plane.
The first camera code that Tim released seemed to do this (which meant
there was some visual quirks for monitors far out to the sides (like
verticals being at angles and so on), but for the person sitting in
front of all the screens it looked about right.

Are there any other "magic" options that would allow me to get to that?
(7+9 is my current plan).
Not much magic other than getting out a tape measure and protractor. It
might
help to build a model of your rig in Blender or another 3D modeling program
and
make measurements of the model.

You could also simplify your geometry by arranging the screens in a cylinder
and
following the curved monitor example in README.multiscreen.

Tim

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great
prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Flightgear-devel mailing list
Flightgear-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/flightgear-devel



<<inline: skew.png>>

-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
Flightgear-devel mailing list
Flightgear-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/flightgear-devel

Reply via email to