Hi again list Actually the math is present in the osgGA::TerrainManipulator (void TerrainManipulator::clampOrientation()) and it works just great with some mods (the 3D transforms for nodes are bit different then for the View matrix. I am all set.
Sebastian, thanks a lot ! Cheers, Nick On Wed, Feb 1, 2017 at 12:43 PM, Trajce Nikolov NICK < [email protected]> wrote: > Thanks Sebastian! > > I will write you off-list > > On Wed, Feb 1, 2017 at 12:36 PM, Sebastian Messerschmidt < > [email protected]> wrote: > >> Hi Trajce, >> >> based on Euler with optional smoothing (to avoid jaggy movement), this >> algorithm will adapt a local pose conserving heading. The smoothing part is >> mainly to get a smooth transition between adjacend terrain normals. Sorry >> for the cluttered code. >> >> <code> >> IN: gmtl::Vec3d local_normal; gmtl::EulerAngleXZYd >> orientation; >> >> >> //extract heading >> const gmtl::Quatd quat = gmtl::make<gmtl::Quatd>(orientation); >> >> gmtl::Vec3d heading = gmtl::xform(heading, quat, >> gmtl::Vec3d(0.0,1.0,0.0)); >> //project heading to plane and normalize >> heading = gmtl::makeNormal(gmtl::Vec3d(heading[0], heading[1], >> 0.0)); >> // get a vector perpendicular to projected heading and the normal >> const gmtl::Vec3d perpendicular = gmtl::makeCross(local_normal, >> heading); >> const gmtl::Vec3d perpendicular_2 = >> gmtl::makeCross(perpendicular, local_normal); >> // construct a new orientation leaving the heading untouched >> orientation = gmtl::EulerAngleZXYd ( >> >> orientation[0] >> >> ,gmtl::Math::aSin(perpendicular_2[2]) >> >> ,gmtl::Math::aTan2(perpendicular[2], local_normal[2]) >> >> ); >> if (smooth_factor < 1.0) >> { >> gmtl::Quatd target_quat = gmtl::makeRot<gmtl::Quatd>(ori >> entation); >> target_quat = gmtl::slerp(target_quat, smooth_factor, >> quat, target_quat); >> orientation = gmtl::makeRot<gmtl::EulerAngle >> ZXYd>(gmtl::makeRot<gmtl::Matrix44d>(target_quat)); >> } >> </code> >> >> Cheers >> Sebastian >> >> P.S. If you got further questions, simply drop me a private message/email. >> >> >> >> >> Am 2/1/2017 um 11:27 AM schrieb Trajce Nikolov NICK: >> >>> Hi Sebastian, >>> >>> the code will be welcome. I was expecting that the proper way is to go >>> through Eulers >>> >>> Thanks a lot! >>> >>> >>> On Wed, Feb 1, 2017 at 9:48 AM, Sebastian Messerschmidt >>> <[email protected] <mailto:[email protected]>> >>> >>> wrote: >>> >>> Hi Trajce, >>> >>> Did I miss the question :-) If it is working: fine. :-) >>> >>> In general you are extracting the heading I guess (with the >>> modelOrientation) and put it on top the tilted normal, which will >>> put you on in this pose. The problem might be, that you introduce >>> unwanted roll with this. I can give you some code (not based on OSG, >>> but you'll get the idea) adapting a EulerAngle pose to a terrain >>> normal using a local tangent plane. >>> >>> Cheers >>> Sebastian >>> >>> >>> >>> >>> Hi community, >>> >>> this is sort of easy math question (btw, I missed that part in my >>> classes ;-) ) I want to check it with you. >>> >>> It is about node following terrain. my node is MatrixTransform >>> and I >>> have to set it in world coordinates. The node has it's own >>> rotation and >>> I just need to take the terrain normal into account. Here is the >>> pseudocode that produces some acceptable results (not sure if >>> they are >>> correct though, thus asking you for hints) >>> >>> Vec3 terrainNormal; >>> >>> Quat terrainOrientation; >>> terrainOrientation.makeRotate(Vec3(0,0,1), terrainNormal); >>> >>> Quat modelOrientation; >>> modelOrientation.makeRotate(Vec3(0,1,0), whatever); >>> >>> Quat q; >>> q = terrainOrientation * modelOrientation; // not sure about this >>> >>> MatrixTransform mxt = ... >>> mxt->setMatrix(Matrixd:;rotate(q) * ...); >>> >>> Any hints? >>> >>> Thanks a bunch as always! >>> Nick >>> >>> >>> -- >>> trajce nikolov nick >>> >>> >>> _______________________________________________ >>> osg-users mailing list >>> [email protected] >>> <mailto:[email protected]> >>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-opens >>> cenegraph.org >>> <http://lists.openscenegraph.org/listinfo.cgi/osg-users-open >>> scenegraph.org> >>> >>> _______________________________________________ >>> osg-users mailing list >>> [email protected] >>> <mailto:[email protected]> >>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-opens >>> cenegraph.org >>> <http://lists.openscenegraph.org/listinfo.cgi/osg-users-open >>> scenegraph.org> >>> >>> >>> >>> >>> -- >>> trajce nikolov nick >>> >>> >>> _______________________________________________ >>> osg-users mailing list >>> [email protected] >>> http://lists.openscenegraph.org/listinfo.cgi/osg-users-opens >>> cenegraph.org >>> >>> _______________________________________________ >> osg-users mailing list >> [email protected] >> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >> > > > > -- > trajce nikolov nick > -- trajce nikolov nick
_______________________________________________ osg-users mailing list [email protected] http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org

