[osg-users] combining Quats
Trajce Nikolov NICK
trajce.nikolov.nick at gmail.com
Wed Feb 1 03:43:16 PST 2017
Thanks Sebastian!
I will write you off-list
On Wed, Feb 1, 2017 at 12:36 PM, Sebastian Messerschmidt <
sebastian.messerschmidt at 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.messerschmidt at gmx.de <mailto:sebastian.messerschmidt at 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 at lists.openscenegraph.org
>> <mailto:osg-users at 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 at lists.openscenegraph.org
>> <mailto:osg-users at 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 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
>
--
trajce nikolov nick
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.openscenegraph.org/pipermail/osg-users-openscenegraph.org/attachments/20170201/60043bfb/attachment-0003.htm>
More information about the osg-users
mailing list