Transpose Matrix



  • On 02/07/2017 at 10:40, xxxxxxxx wrote:

    Hello,

    How can I transpose a matrix in C4D ? Is it possible ?

    It seems that le C4D matrix are 4x4 but the first line can't be changed (always 0,0,0,1) ?

    My goal is to get or calculate the normalMatrix, but not in a shader context.

    Thanks



  • On 02/07/2017 at 12:04, xxxxxxxx wrote:

    Ok, it seems that we don't care beause the first will line will be the offset matrix component :

      
    1     0     0     0
    v0.x  v1.x  v2.x  v3.x
    v0.y  v1.y  v2.y  v3.y
    v0.z  v1.z  v2.z  v3.z
      
    Transposed :
      
    1    v0.x  v0.y  v0.z
    0    v1.x  v1.y  v1.z
    0    v2.x  v2.y  v2.z
    0    v3.x  v3.y  v3.z
      
    

    So with an offset v0 of (0,0,0), we will still get the first line correct.

        def TransposeMatrix(m) :
            
            v1 = Vector(m.v1.x, m.v2.x, m.v3.x)
            v2 = Vector(m.v1.y, m.v2.y, m.v3.y)
            v3 = Vector(m.v1.z, m.v2.z, m.v3.z)
            
            m.v1 = v1
            m.v2 = v2
            m.v3 = v3
            m.off = Vector()
    

    Can you confirm me ? :-)



  • On 03/07/2017 at 06:44, xxxxxxxx wrote:

    Hi César,

    unfortunately I can only confirm that there is no function to transpose a matrix in our Python SDK.
    To me, your transposed matrix in the last post looks ok.

    Maybe you can tell us a bit more detail about what you are trying to achieve in the end, so we could ask our development for ideas?

    Or you use something like numpy, I think Niklas once posted, that he has prepared packages for use with C4D.



  • On 05/07/2017 at 14:44, xxxxxxxx wrote:

    Thanks for the info.

    Well, it's for create a Spherical Environment UV projection, for very specific baking process.

    According to the shader :
    https://www.clicktorelease.com/blog/creating-spherical-environment-mapping-shader/

    I needed to get the normalMatrix wich is the inverse transpose of the modelViewMatrix.

    For anyone who search more infos about it :

    modelViewMatrix = ~(camera.GetMg()) * op.GetMg()
    normalMatrix = ~(modelViewMatrix)
    TransposeMatrix(normalMatrix)

    It work nice !


Log in to reply