Lars, I haven't looked at your code, however, I have looked at the code for VisIt (3D renderer from LLNL) and in vis5d (renderer for weather models) and in both cases they had what I remember to be a simple algorithm for eye location/separation. Both renderers work well in 3D while panning zooming etc.
Doug Reeder On Apr 9, 2012, at 4:56 PM, Lars O. Grobe wrote: > Hi Greg! > > My guess is that targeting a 3d-tv format (which is what I did) is rather > different then working with slides, where adjustments can be made on display. > In my example, especially objects close to the observer were hard to view > with standard vwright settings, while the modified vs and vh views led to a > rather clear result. I may need to try some more scenes before claiming this > to be true in general. To give an idea of the changes for vh, my initial 75 > degrees became 72 degrees for a simple test scene, eye distance 0.065m and > distance about one meter. > > I can dig some more into this, but only after Friday. I wanted to share my > work though, so that maybe others can comment or correct me. > > Cheers, Lars. > -- > Dipl.-Ing. Architect Lars O. Grobe > > On Apr 10, 2012, at 1:07, "Gregory J. Ward" <gregoryjw...@gmail.com> wrote: > >> Hi Lars, >> >> I only ever created stereo slide pairs using vwright, in which case, simply >> moving the slides closer together a small amount alleviated any discomfort. >> It amounts to the same as -vs (modulo the image borders). >> >> I wrote vwright before introducing the notion of viewing distance (the >> length of the -vd vector). I could add an option to vwright for the screen >> distance that would take the view distance and turn on the kind of automatic >> adjustment you propose. I don't have any way to test it, unfortunately. >> >> Do you think the adjustment of -vh is really necessary? Regardless of what >> you do with it, the borders will not match for all objects, anyway. >> >> Cheers, >> -Greg >> >>> From: "Lars O. Grobe" <gr...@gmx.net> >>> Date: April 9, 2012 1:45:04 PM PDT >>> >>> Hi all, >>> >>> I just found that vwright, which looked like the perfect tool to support >>> stereoscopic image pair generation, generates a new view by simply >>> moving the view-point -vp. This does not consider the fact that our eyes >>> (hopefully) are able to focus on an object, not looking parallel into >>> infinity. So my resulting frames do not really match (I tried it and it >>> looked ugly...). Paul Bourke provides a great page explaining the >>> background of such stereo pairs on his website: >>> >>> http://paulbourke.net/miscellaneous/stereographics/stereorender/ >>> >>> To correct this, I would propose to manipulate the -vs and -vh >>> parameters in the view file generated by vwright. I am not that great in >>> doing reprojections, but from what I understand, this should work. I >>> have made a simple sketch to visually explain what I attempted to do >>> (and probably what I did wrong): >>> >>> web-browsers with svg-support >>> http://static.larsgrobe.de/stereoscopic_vwright.svg >>> >>> pdf of the same sketch >>> http://static.larsgrobe.de/stereoscopic_vwright.pdf >>> >>> Here is my approach: >>> >>> e [scene units]: eye seperation >>> is given as input to vwright, known >>> >>> f [scene units]: distance from either eye point to the image plane >>> can simply be calculated from view direction vector vd_x, vd_y, vd_z: >>> f = sqrt(vd_x^2+vd_y^2+vd_z^2) >>> >>> alpha [degrees]: half horizontal view angle >>> can simply be calculated from view's vh: alpha = vh/2 >>> >>> a [scene units]: alpha projected on the image plane >>> a = f * tan(alpha) >>> >>> 1) Calculate horizontal shift value vs for views: >>> >>> vs [] : shift fraction (eye separation e / projected image width 2*a) >>> can be calculated from above as vs = e / 2*a >>> >>> For the left view, I modify vs as above, for the right view I use its >>> negative value. >>> >>> 2) Correct the horizontal field of view vh for views: >>> >>> The stereoscopic image can be displayed only the overlapping image area >>> for both views. Thus we need to cut the left border from the left and >>> the right border from the right view. >>> >>> beta [degrees]: the angle corresponding to this border (having the same >>> width as the eye separation, but being located in the image plane) >>> calculated as beta = alpha - atan ( (a-e)/f ) >>> >>> This allows calculating the corrected horizontal view angle vh_corr, >>> which will replace the vh in my view files: >>> >>> vh_corr [degrees]: corrected horizontal field of view >>> as vh_corr = vh - beta >>> >>> 3) The full procedure: >>> >>> - take a view, derive left and right views from it by running vwright >>> (+/-) e/2 >>> >>> - calculate vs and vh_corr and replace the corresponding values in both >>> views >>> >>> - render, take on your glasses, and enjoy stereoscopic 3d images.... >>> >>> I hope this is correct, for me it gave results looking much better then >>> those by simply using vwright's view parameters. I think that having >>> this in vwright as an option (either active by default, or, to preserve >>> backwards compatibility, switched by e.g. -s as stereographic) would >>> make rendering of stereo pairs with Radiance much more fun. >>> >>> Any comments? Cheers, Lars. >>> >> >> _______________________________________________ >> Radiance-dev mailing list >> Radiance-dev@radiance-online.org >> http://www.radiance-online.org/mailman/listinfo/radiance-dev > > _______________________________________________ > Radiance-dev mailing list > Radiance-dev@radiance-online.org > http://www.radiance-online.org/mailman/listinfo/radiance-dev _______________________________________________ Radiance-dev mailing list Radiance-dev@radiance-online.org http://www.radiance-online.org/mailman/listinfo/radiance-dev