Thanks Sebastian! I will write you off-list
On Wed, Feb 1, 2017 at 12:36 PM, Sebastian Messerschmidt < sebastian.messerschm...@gmx.de> 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 >> <sebastian.messerschm...@gmx.de <mailto:sebastian.messerschm...@gmx.de>> >> >> 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 >> osg-users@lists.openscenegraph.org >> <mailto:osg-users@lists.openscenegraph.org> >> 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 >> osg-users@lists.openscenegraph.org >> <mailto:osg-users@lists.openscenegraph.org> >> 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 >> osg-users@lists.openscenegraph.org >> http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org >> >> _______________________________________________ > osg-users mailing list > osg-users@lists.openscenegraph.org > http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org > -- trajce nikolov nick
_______________________________________________ osg-users mailing list osg-users@lists.openscenegraph.org http://lists.openscenegraph.org/listinfo.cgi/osg-users-openscenegraph.org