[osg-users] Different results from camera->getViewMatrix() in OSG 3.4.0 compared to OSG 3.2.1
Christian Buchner
christian.buchner at gmail.com
Thu Apr 14 04:51:56 PDT 2016
The plug-in you used to load your model may behave differently and as a
result the scene's bounding sphere center could have shifted
.
2016-04-14 13:21 GMT+02:00 Robert Osfield <robert.osfield at gmail.com>:
> Hi Ronny,
>
> I don't recall any specific changes to view matrix management between
> OSG-3.2.1 and OSG-3.4.0. I'm also not aware of any bugs being reported
> that look relevant to this what you are describing.
>
> Printing out two sets of view matrices for the two versions without the
> view's being identical isn't useful. Try to create the exactly same input
> conditions - for instance by explictly setting the view matrix. The mouse
> input are another variable you'd need to standardize.
>
> Also when describing the problem you'll need to do more than saying a
> "vertical offset", this has so many different possible interpretations that
> it's pointless even starting to guess what you mean.
>
> Robert.
>
>
>
> On 14 April 2016 at 12:02, Ronny Hatteland <ronnyhatteland at gmail.com>
> wrote:
>
>> Hi,
>>
>> I have some code for doing picking of objects on the screen:
>>
>>
>> Code:
>> float dX = ea.getX();
>> float dY = ea.getY();
>>
>> osg::ref_ptr<osg::Camera> camera = view->getCamera();
>>
>> // compute model to window transform
>> // Model*View*Projection*WindowMatrix
>> osg::Matrixd matrix;
>> matrix.postMult(camera->getViewMatrix());
>> matrix.postMult(camera->getProjectionMatrix());
>> osg::Matrixd windowMatrix = camera->getViewport()->computeWindowMatrix();
>> matrix.postMult(windowMatrix);
>>
>> osg::Matrixd inverse;
>> inverse.invert(matrix);
>>
>> // get the coordinates in screen-space:
>> osg::Vec3 mouseloc = osg::Vec3(dX, dY, 0) * inverse;
>> osg::Vec3 normalizedMouseRay = (osg::Vec3(dX, dY, 1) * inverse) -
>> mouseloc;
>> osg::Plane _dragPlane(osg::Vec4d(0, 1, 0, 0));
>>
>>
>> Which was working perfectly fine in OSG 3.2.1.
>> However, when I updated to OSG 3.4.0 a vertical offset was introduced,
>> which seems to be constant regardless of the camera.
>>
>> Positioning the camera at approximately the same place in both cases, and
>> looking at the matrices, it looks like the offset was introduced already by
>> the getViewMatrix() method, value[3][3]:
>>
>>
>> Code:
>> matrix.postMult(camera->getViewMatrix());
>> 3.4.0:
>> [0] {1.0000000000000000, 0.00000000000000000, 0.00000000000000000,
>> 0.00000000000000000}
>> [1] {0.00000000000000000, 0.00000000000000000, -1.0000000000000000,
>> 0.00000000000000000}
>> [2] {0.00000000000000000, 1.0000000000000000, 0.00000000000000000,
>> 0.00000000000000000}
>> [3] {-1009.2817596644163, 216.03970056772232, -509.02834880430618,
>> 1.0000000000000000}
>> 3.2.1:
>> [0] {1.0000000000000000, 0.00000000000000000, 0.00000000000000000,
>> 0.00000000000000000}
>> [1] {0.00000000000000000, 0.00000000000000000, -1.0000000000000000,
>> 0.00000000000000000}
>> [2] {0.00000000000000000, 1.0000000000000000, 0.00000000000000000,
>> 0.00000000000000000}
>> [3] {-1061.2815714627504, 239.85043859481812, -599.72003111232948,
>> 1.0000000000000000}
>>
>> matrix.postMult(camera->getProjectionMatrix());
>> 3.4.0:
>> [0] {1.7748398086904795, 0.00000000000000000, 0.00000000000000000,
>> 0.00000000000000000}
>> [1] {0.00000000000000000, 0.00000000000000000, 1.0000000000000200,
>> 1.0000000000000000}
>> [2] {0.00000000000000000, 3.8461539872299335, 0.00000000000000000,
>> 0.00000000000000000}
>> [3] {-1791.3134452375832, 830.92195573850609, 509.02834880411638,
>> 509.02834880430618}
>> 3.2.1
>> [0] {1.7748398086904795, 0.00000000000000000, 0.00000000000000000,
>> 0.00000000000000000}
>> [1] {0.00000000000000000, 0.00000000000000000, 1.0000000000000200,
>> 1.0000000000000000}
>> [2] {0.00000000000000000, 3.8461539872299335, 0.00000000000000000,
>> 0.00000000000000000}
>> [3] {-1883.6047812616794, 922.50172074030797, 599.72003111214144,
>> 599.72003111232948}
>>
>> WindowMatrix
>> 3.4.0:
>> [0] {960.00000000000000, 0.00000000000000000, 0.00000000000000000,
>> 0.00000000000000000}
>> [1] {0.00000000000000000, 443.00000000000000, 0.00000000000000000,
>> 0.00000000000000000}
>> [2] {0.00000000000000000, 0.00000000000000000, 0.50000000000000000,
>> 0.00000000000000000}
>> [3] {960.00000000000000, 581.00000000000000, 0.50000000000000000,
>> 1.0000000000000000}
>> 3.2.1
>> [0] {960.00000000000000, 0.00000000000000000, 0.00000000000000000,
>> 0.00000000000000000}
>> [1] {0.00000000000000000, 443.00000000000000, 0.00000000000000000,
>> 0.00000000000000000}
>> [2] {0.00000000000000000, 0.00000000000000000, 0.50000000000000000,
>> 0.00000000000000000}
>> [3] {960.00000000000000, 443.00000000000000, 0.50000000000000000,
>> 1.0000000000000000}
>>
>> matrix.postMult(windowMatrix);
>> 3.4.0:
>> [0] {1703.8462163428603, 0.00000000000000000, 0.00000000000000000,
>> 0.00000000000000000}
>> [1] {960.00000000000000, 581.00000000000000, 1.0000000000000100,
>> 1.0000000000000000}
>> [2] {0.00000000000000000, 1703.8462163428605, 0.00000000000000000,
>> 0.00000000000000000}
>> [3] {-1230993.6925759460, 663843.89704746008, 509.02834880421130,
>> 509.02834880430618}
>> 3.2.1
>> [0] {1703.8462163428603, 0.00000000000000000, 0.00000000000000000,
>> 0.00000000000000000}
>> [1] {960.00000000000000, 443.00000000000000, 1.0000000000000100,
>> 1.0000000000000000}
>> [2] {0.00000000000000000, 1703.8462163428605, 0.00000000000000000,
>> 0.00000000000000000}
>> [3] {-1232529.3601433760, 674344.23607071838, 599.72003111223546,
>> 599.72003111232948}
>>
>> inverse
>> 3.4.0:
>> [0] {0.00058670300251959689, 1.0310124207250091e-007,
>> 4.3757801540539190e-008, -2.0254518695206543e-010}
>> [1] {0.00000000000000000, 0.00000000000000000, 0.00058690742768229540,
>> 0.00000000000000000}
>> [2] {-10086449333416.564, 5087071672824.5107, 2159033860383.4014,
>> -9993690301.8739624}
>> [3] {10086449333416.104, -5087071672823.5625, -2159033860383.7642,
>> 9993690301.8740635}
>> 3.2.1
>> [0] {0.00058743635625737895, -2.9889246175079844e-007,
>> -1.1953825839478168e-007, 4.9838665751483716e-010}
>> [1] {0.00000000000000000, 0.00000000000000000, 0.00058690742768229540,
>> 0.00000000000000000}
>> [2] {-10634237608903.178, 6009305617996.5537, 2403345750271.9492,
>> -10020184930.042784}
>> [3] {10634237608902.719, -6009305617995.6123, -2403345750272.2324,
>> 10020184930.042881}
>>
>>
>> Is this a bug or is there a reason why this is different between the two
>> versions?
>>
>> Thank you!
>>
>> Cheers,
>> Ronny[/code]
>>
>> ------------------
>> Read this topic online here:
>> http://forum.openscenegraph.org/viewtopic.php?p=66808#66808
>>
>>
>>
>>
>>
>> _______________________________________________
>> osg-users mailing list
>> osg-users at lists.openscenegraph.org
>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>>
>
>
> _______________________________________________
> osg-users mailing list
> osg-users at lists.openscenegraph.org
> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20160414/f272dfeb/attachment-0003.htm>
More information about the osg-users
mailing list