def itransformMatrix( translation = (0,0,0), center = (0,0,0), rotation = (0,1,0,0), scale = (1,1,1), scaleOrientation = (0,1,0,0), parentMatrix = None, ): """Convert VRML transform values to an inverse transform matrix Returns 4x4 transformation matrix Note that this uses VRML standard for rotations (angle last, and in radians). This should return matrices which, when applied to parent-space coordinates, give you local-space coordinates for the corresponding transform. Note: this is a substantially un-tested algorithm though it seems to be properly constructed as far as I can see. Whether to use dot(x, parentMatrix) or the reverse is not immediately clear to me. parentMatrix if provided, should be the child's transformation matrix, a 4x4 matrix of such as returned by this function. """ T,T1 = transMatrix( translation ) C,C1 = transMatrix( center ) R,R1 = rotMatrix( rotation ) SO,SO1 = rotMatrix( scaleOrientation ) S,S1 = scaleMatrix( scale ) return compressMatrices( parentMatrix, C,SO, S1, SO1, R1, C1, T1)
def transformMatrix( translation = (0,0,0), center = (0,0,0), rotation = (0,1,0,0), scale = (1,1,1), scaleOrientation = (0,1,0,0), parentMatrix = None, ): """Convert VRML transform values to an overall matrix Returns 4x4 transformation matrix Note that this uses VRML standard for rotations (angle last, and in radians). This should return matrices which, when applied to local-space coordinates, give you parent-space coordinates. parentMatrix if provided, should be the parent's transformation matrix, a 4x4 matrix of such as returned by this function. """ T,T1 = transMatrix( translation ) C,C1 = transMatrix( center ) R,R1 = rotMatrix( rotation ) SO,SO1 = rotMatrix( scaleOrientation ) S,S1 = scaleMatrix( scale ) return compressMatrices( parentMatrix, T,C,R,SO,S,SO1,C1 )
def localMatrices( translation = (0,0,0), center = (0,0,0), rotation = (0,1,0,0), scale = (1,1,1), scaleOrientation = (0,1,0,0), parentMatrix = None, ): """Calculate (forward,inverse) matrices for this transform element""" T,T1 = transMatrix( translation ) C,C1 = transMatrix( center ) R,R1 = rotMatrix( rotation ) SO,SO1 = rotMatrix( scaleOrientation ) S,S1 = scaleMatrix( scale ) return ( compressMatrices( T,C,R,SO,S,SO1,C1 ), compressMatrices( C,SO, S1, SO1, R1, C1, T1) )
def transformMatrices( translation = (0,0,0), center = (0,0,0), rotation = (0,1,0,0), scale = (1,1,1), scaleOrientation = (0,1,0,0), parentMatrix = None, ): """Calculate both forward and backward matrices for these parameters""" T,T1 = transMatrix( translation ) C,C1 = transMatrix( center ) R,R1 = rotMatrix( rotation ) SO,SO1 = rotMatrix( scaleOrientation ) S,S1 = scaleMatrix( scale ) return ( compressMatrices( parentMatrix, T,C,R,SO,S,SO1,C1 ), compressMatrices( parentMatrix, C,SO, S1, SO1, R1, C1, T1) )