Property Tree/Native Protocol Slaving: Difference between revisions

Jump to navigation Jump to search
→‎Asymmetric View Frustrums: http://www.mail-archive.com/flightgear-devel@flightgear.org/msg30981.html
(→‎Success !: http://flightgear.org/forums/viewtopic.php?f=36&t=19858&p=182757#p182754)
(→‎Asymmetric View Frustrums: http://www.mail-archive.com/flightgear-devel@flightgear.org/msg30981.html)
Line 47: Line 47:


I should point out that we also have some capabilities for configuring asymmetric view frustums if you need that. We use a higher level mechanism (that meshed well with what we already had in place) so you specify a larger screen and then specify the horizontal and vertical subsections of that larger display that will be shown on a particular monitor. This probably doesn't cover all asymmetric view frustum needs, but it does let you do a lot in a way that people can conceptually get their head around (rather than using obscure l, r, t, b, n, f numbers that takes an opengl guru to derive.)
I should point out that we also have some capabilities for configuring asymmetric view frustums if you need that. We use a higher level mechanism (that meshed well with what we already had in place) so you specify a larger screen and then specify the horizontal and vertical subsections of that larger display that will be shown on a particular monitor. This probably doesn't cover all asymmetric view frustum needs, but it does let you do a lot in a way that people can conceptually get their head around (rather than using obscure l, r, t, b, n, f numbers that takes an opengl guru to derive.)
For my specific need I wanted 3 monitors side by side in a straight line, and I wanted the projection plane to also be a straight line. So referencing your link, Example 1 is what we originally could do, but is not what I wanted. I wanted to do something similar to Example .... errr ... I guess there isn't an example on that page of what I wanted to do. Kind of like Example 5 I guess except with the "red" line (plane of projection) extending straight across. The center view frustum would be symmetic and the sides would be asymmetric. I realize this isn't "correct" but I need a compromise to build a display system that look "reasonable" from a large variety of perspectives at the same time.
So anyway, here's my approach. Let's say I wanted 3 monitors, each covering 30 degrees FOV.
* I added an --aspect-ratio-multipler=x.xx option. FG automatically calculates aspect ratio based on X, Y screen resolution. This option scales the Y FOV.
* I created a super wide display with something like --fov=90 --aspect-ratio-multiplier=0.33333
* I added some options to select a portion of this wide screen to draw onto the individual monitor:
<pre>
--prop:/sim/current-view/frustum-left-pct=0.00000
--prop:/sim/current-view/frustum-right-pct=0.333333
</pre>
This gives me the leftmost 1/3 of my wide (--fov=90) screen. And the aspect ratio multiplier option allows me to get the desired vertical field of view.
Well, technically, my scheme still requires a separate running copy of FG and a separate video card for each monitor. I've had the best results doing this from 3 different machines, but I've heard stories of others having reasonable results with running multiple copies of FG on a single machine. At the moment FG doesn't have direct support for opening up multiple windows to drive multiple displays from a single instance of FG.
There really isn't any extra performance hit though for asymmetric view frustums. The frustum is trimmed down before the cull and draw phase.
I should say though that most people will just want to point their displays perpendicular to the viewer and use a more standard/straightforward symetric view frustums. I had to do asymmetric view frustums for a particular project with specialized needs. We ended up with a combination of compromises that I wasn't entirely happy about. We were trying to achieve a middle of the road solution that wasn't perfect anywhere, but wasn't horrible anywhere either.


== Syncing multiple instances ==
== Syncing multiple instances ==

Navigation menu