Hello Michael,

On 08/15/2014 07:45 PM, Michael Raab wrote:
> Am 15.08.2014 16:51 schrieb Carsten Neumann <carsten.p.neum...@gmail.com>:
>> assuming that recombining this back into matrices yields the starting
>> matrices (i.e. it is not a bug in the decomposition) this would be
>> caused by a degree of freedom in the algorithm.
>
> Does it really  produce the initial Matrix? Haven't tested this...
>
>> I can think of the following options:
>> - figure out where this degree of freedom is and make choose the scale
>> orientation more consistently.
>
> Sorry I don't understand this..
>
>> - can you use a ComponentTransform instead of a plain Transform and only
>> modify the individual components. That would make the decomposed form
>> the canonical representation and only build the matrix from those.
>
> That is not an option as the matrix is the result of a sequence of 
> transformations.
>
>> - can you make assumptions about the matrix, e.g. is it composed from
>> translation, rotation, and (uniform) scale only?
>
> Unfortunately not. The only assumption I can think of is that the scale 
> should be applied without any additional scale orientation.
> Usually I think of transformation matrices as a combination of the 3 
> components translation, rotation and scale. Actually I do not know where the 
> scale orientation is necessary or useful.

the problem with that is that if your sequence of transformations 
contains a scale, a rotation and another scale (i.e. M = S * R * Z) you 
can not really find a rotation R' and scale S' such that M = R' * S':

      (s_x          )      (r_xx  r_xy  r_xz   )
S =  (    s_y      )  R = (r_yx  r_yy  r_yz   )
      (        s_z  )      (r_zx  r_zy  r_zz   )
      (            1)      (                  1)

             ( s_x z_x r_xx  |  s_x z_y r_xy  |  s_x z_z r_xz  |   )
S * R * Z = ( s_y z_x r_xx  |  s_x z_y r_xy  |  s_y z_z r_xz  |   )
             ( s_z z_x r_xx  |  s_z z_y r_xy  |  s_z z_z r_xz  |   )
             (               |                |                |  1)

In R' * S' the columns of the rotation are all scaled by the same 
factor, while in S * R * Z every row and column has its individual scale 
factor (s_* z_*). The two scaling operations S and Z happen along 
different axis. It is possible to find a rotation (call it SR) and new 
scaling factors S'' such that this 'complicated scaling along different 
axis' can again be represented as scaling along the canonical axis' in 
that rotation (!) - that is the product S * R * Z can be written:
   R' * SR * S'' * SR^-1
where R' is a rotation and S'' is a scaling matrix, SR is a rotation 
(into a coordinate system where we can scale along the canonical axis) - 
the scale orientation.

Hope this makes some sense and that I got it right ;)

        Cheers,
                Carsten

------------------------------------------------------------------------------
Slashdot TV.  
Video for Nerds.  Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
Opensg-users mailing list
Opensg-users@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/opensg-users

Reply via email to