[Bf-committers] matrix multiplication in Blender SVN of this morning (W32 Vista mingw compiled)

Campbell Barton ideasman42 at gmail.com
Wed Jul 27 16:16:58 CEST 2011


This is definitely possible with the api (and probably not all that
much work) but its quite a big change for some script authors - unlike
multiplication order (trivial by comparison).

I don't have a sense for whats normal here since I only use mathutils
but if this is so confusing and most/all other apis do it ROW-MAJOR
then perhaps?

Interested to hear other blender devs opinions on this.

On Wed, Jul 27, 2011 at 11:56 PM, Morten Mikkelsen <mikkelsen7 at gmail.com> wrote:
> I am with you on this one. Memory layout is one thing. Abstraction is
> something else entirely.
> Afterall, one could choose the memory layout to be some crazy fixed random
> layout or a swizzled
> layout or whatever. And in both cases there is no reason why, at abstraction
> level, either one could be considered
> column or alternatively row major. As an example if the abstraction is
> column major you'd set translation as a set_column
> function (and set_row if the api is row major). This can work with any
> memory layout. To me they are two separate things.
>
> (It's implied here that set_column refers to the abstract column).
>
> Cheers,
>
> Morten.
>
>
>
>
>
>
> On Wed, Jul 27, 2011 at 6:05 AM, Paul Melis <paul.melis at sara.nl> wrote:
>
>> Just chiming in here....
>>
>> On 07/27/2011 12:47 PM, Benoit Bolsee wrote:
>> > Hi, I repeat once more: mathutils matrices are COLUMN-MAJOR. This means
>> > that the top elements in the definition list are columns, not rows,
>> > despite the fact that they are printed horizontaly.
>> > [...]
>> > Mathutils matrices are column-major because that's how Blender stores
>> > the matrices internal, and Blender uses that convention because openGL
>> > uses it.
>>
>> Why would the textual (or any higher-level representation) have to
>> follow the storage layout?
>>
>> For me those are two distinct concepts and it would be the least
>> confusing to have the matrix representation follow the regular math
>> convention. E.g.
>> http://www.opengl.org/sdk/docs/man/xhtml/glLoadMatrix.xml shows
>> multiplication with a matrix m being loaded as
>>
>>       / m[0]  m[4]  m[8]   m[12] \   / v[0] \
>> M(v) = | m[1]  m[5]  m[9]   m[13] | x | v[1] |
>>       | m[2]  m[6]  m[10]  m[14] |   | v[2] |
>>       \ m[3]  m[7]  m[11]  m[15] /   \ v[3] /
>>
>> even though the actual storage order of the matrix is obviously
>> column-major.
>>
>> Secondly, when creating a matrix with Matrix([e1, e2, e3, e4]) I was
>> very surprised to see that the e_i represent columns! Again, this is the
>> storage layout coming through on a higher level, which is confusing.
>>
>> Anyways, just my 2 cents.
>>
>> Regards,
>> Paul
>> _______________________________________________
>> Bf-committers mailing list
>> Bf-committers at blender.org
>> http://lists.blender.org/mailman/listinfo/bf-committers
>>
> _______________________________________________
> Bf-committers mailing list
> Bf-committers at blender.org
> http://lists.blender.org/mailman/listinfo/bf-committers
>



-- 
- Campbell


More information about the Bf-committers mailing list