Feedback

Please leave feedback and comments. I am always interested to hear how people get on using these LScripts!

Sunday 17 February 2013

Library - Matrix

The Library is where code samples, building blocks of scripts will be shared.

matrixworld: item,time // m
{
    // call before matrixtransformworld()
    vnRight = item.getRight(time); // Right
    m[1][1] = vnRight.x;
    m[1][2] = vnRight.y;
    m[1][3] = vnRight.z;
    m[1][4] = 0.0;
    vnUp = item.getUp(time); // Up
    m[2][1] = vnUp.x;
    m[2][2] = vnUp.y;
    m[2][3] = vnUp.z;
    m[2][4] = 0.0;
    vnForward = item.getForward(time); // Forward
    m[3][1] = vnForward.x;
    m[3][2] = vnForward.y;
    m[3][3] = vnForward.z;
    m[3][4] = 0.0;
    vWorldPosition = item.getWorldPosition(time); // World Position
    m[4][1] = vWorldPosition.x;
    m[4][2] = vWorldPosition.y;
    m[4][3] = vWorldPosition.z;
    m[4][4] = 1.0;
    return(m);
}

matrixinverseworld: item,time // m
{
    // call before matrixtransformlocal()
    vnRight = item.getRight(time); // Right
    m[1][1] = vnRight.x;
    m[1][2] = vnRight.y;
    m[1][3] = vnRight.z;
    m[1][4] = 0.0;
    vnUp = item.getUp(time); // Up
    m[2][1] = vnUp.x;
    m[2][2] = vnUp.y;
    m[2][3] = vnUp.z;
    m[2][4] = 0.0;
    vnForward = item.getForward(time); // Forward
    m[3][1] = vnForward.x;
    m[3][2] = vnForward.y;
    m[3][3] = vnForward.z;
    m[3][4] = 0.0;
    vWorldPosition = item.getWorldPosition(time); // World Position
    m[4][1] = -vWorldPosition.x;
    m[4][2] = -vWorldPosition.y;
    m[4][3] = -vWorldPosition.z;
    m[4][4] = 1.0;
    return(m);
}

matrixtransformworld: v,m // v
{
    // call after matrixworld()
    _v = <0.0,0.0,0.0>;
    _v.x = m[1][1] * v.x + m[2][1] * v.y + m[3][1] * v.z + m[4][1];
    _v.y = m[1][2] * v.x + m[2][2] * v.y + m[3][2] * v.z + m[4][2];
    _v.z = m[1][3] * v.x + m[2][3] * v.y + m[3][3] * v.z + m[4][3];
    return(_v);
}

matrixtransformlocal: v,m // v
{
    // call after matrixinverseworld()
    _v = <0.0,0.0,0.0>;    
    v.x += m[4][1];
    v.y += m[4][2];
    v.z += m[4][3];
    _v.x = m[1][1] * v.x + m[2][1] * v.y + m[3][1] * v.z;
    _v.y = m[1][2] * v.x + m[2][2] * v.y + m[3][2] * v.z;
    _v.z = m[1][3] * v.x + m[2][3] * v.y + m[3][3] * v.z;
    return(_v);
}

No comments:

Post a Comment