[osg-users] osg::Matrixd --> How to remove rotation for a certainaxis?
Thrall, Bryan
bryan.thrall at flightsafety.com
Mon Feb 4 13:37:42 PST 2008
John Kelso wrote on Monday, February 04, 2008 2:31 PM:
> Won't this also remove the scale?
Yes, but only for the X and Y axes :)
> On Mon, 4 Feb 2008, Thrall, Bryan wrote:
>
>>
>> Sorry, hit send too soon, updated below...
>>
>> Thrall, Bryan wrote on Monday, February 04, 2008 12:21 PM:
>>> Tobias M?nch wrote on Monday, February 04, 2008 11:29 AM:
>>>> Hello at all,
>>>>
>>>> I have osg::Matrixd view matrix and want to remove the rotation
>>>> around x- and y-axis. Only rotation around z-axis should stay in
>>>> the matrix. I try a lot of possibilties but couldn't find a
>>>> solution.
>>>>
>>>> When I make the following steps, the rotation around all axis is
>>>> removed, not only the two specified axis. The same with
>>>> osg::Matrixd::makeRotate(..);
>>>>
>>>> matrix = osg::Matrixd::rotate(osg::DegreesToRadians(0.0),
>>>> osg::Vec3(0,1,0));
>>>>
>>>> matrix = osg::Matrixd::rotate(osg::DegreesToRadians(0.0),
>>>> osg::Vec3(1,0,0));
>>>>
>>>>
>>>> I also tried to set the matrix with complete new values and to take
>>>> given value for z-rotation, but therefore I miss a function to read
>>>> the one rotation part (around the z-axis).
>>>>
>>>> How can help me?
>>>
>>> Both of those lines *set* matrix to a non-rotating matrix; what you
>>> want is to *modify* the matrix to remove the X and Y rotations.
>>>
>>> The easiest way is to modify the matrix directly:
>>>
>>
>> matrix(0,0) = 1;
>> matrix(0,1) = 0;
>> matrix(0,2) = 0;
>> matrix(1,0) = 0;
>> matrix(1,1) = 1;
>> matrix(1,2) = 0;
>>
>> If I didn't mess up my indices, this zeroes out the X and Y
>> rotations while leaving the Z intact.
--
Bryan Thrall
FlightSafety International
Bryan.Thrall at flightsafety.com
More information about the osg-users
mailing list