Errr. I hope I'm replying to my own email correctly. If not I apologize.
It turns out P.E.B.K.A.C. Sadly as I wrote my previous email I continued to
say to myself, "this must be column major and my code isn't handling that
right". I guess between transposing() to and from maya, as well as my
options for asList(), different order of operations, and on top of
re-familiarizing myself with Maya I just did it wrong...a lot of different
ways. I think one time I forgot to transpose back, another time I forgot to
switch my order of operation, and who knows the 12+ other times :)
def cgkit_matrix( xform_list ):
takes a 16 element list (assumed to be the result of a xform query) and
returns a cgkit.cgtypes.mat4 in proper form
matrix = cgkit.cgtypes.mat4( xform_list )
matrix = matrix.transpose( )
def maya_xform_list( matrix ):
converts a cgkit.cgtypes.mat4 into a row list that can be used with
The original matrix is left unaltered.
#create a copy of the original matrix
matrix = cgkit.cgtypes.mat4( matrix )
matrix = matrix.transpose( )
return matrix.toList( rowmajor = True )
Cool lib b.t.w.
On Fri, Apr 1, 2011 at 4:10 PM, Nathaniel Albright
> Hello to whoever may see this (if I'm even doing this right. this is my
> first time using a mailing list),
> I'm attempting to use cgkit with Maya for some app specific transform
> manipulation as well as for animation exporting/importing. However, after a
> number of hours (more than I'd care to admit) I've only had limit success.
> Most of this confusion has come from the way cgkit and Maya represent their
> matrices. Since any queries in maya for an object's xform result in a list
> of elements in row order, and cgkit requests the data in row order I
> wouldn't expect the issues I'm currently having.
> For example, if I pass cgkit the maya_list and then immediately call
> decompose() translation is returned. Initially this left me to believe
> cgkit must be columnMajor ( especially since the toList() returns the
> results as columns by default ). As such I did a transpose() on the matrix
> before the decompose() and as expected I then had my proper transform
> Unfortunately I've since determined that this isn't the proper answer to my
> issue. While the transpose worked well for getting what I need out of
> decompose, it created incorrect results for manipulating the data and then
> setting the results back into Maya. I've only successfully been able to
> manipulate my cgkit objects and plot the data back into Maya when I DON'T do
> any transpose....I'm using toList( rowmajor = True ). However as mentioned
> then the decompose() function isn't correct.
> I could ramble with all the ways I've been confused, however I think I just
> need some clarification. From what I can gather in the document the
> translation value is embedded as the forth element of the three axises. for
> a_list = [ v1.x, v1.y, v1.z, t.x, v2.x, v2.y, v2.z, t.y, v3.x, v3.y,
> v3.z, t.z, v4.x, v4.y, v4.z, t.w, ]
> is this correct?
> I was expecting it to be:
> b_list = [ v1.x, v1.y, v1.z, v1.w, v2.x, v2.y, v2.z, v2.w, v3.x,
> v3.y, v3.z, v3.w, t.x, t.y, t.z, t.w, ]
> as such, I wrote a transpose_translation() which as the name suggests
> swaps out the last row and column so that a mat4 initialized with a b_list
> results in the expected a_list form. Unfortunately with this method I'm
> back to square one, where the decompose works, but any math operations
> result in correct answers. It seems as if when the transform is in the last
> row everything math wise works, but cgkit is expecting it in the last
> column...where my math operations don't work.
> Does anyone have any tips on what I'm doing wrong or gotten things to work
> between Maya and the cgkit?
> Thanks in advance,