getTransformationMatrix3D method

Matrix3D getTransformationMatrix3D(
  1. DisplayObject targetSpace
)

The 3D transformation matrix relative to the given targetSpace.

Note: You can get the transformation matrix either with the getTransformationMatrix or the getTransformationMatrix3D method. You only need to use a 3D transformation matrix if you are working with 3D display objects.

Implementation

Matrix3D getTransformationMatrix3D(DisplayObject targetSpace) {
  if (targetSpace == this) return Matrix3D.fromIdentity();

  final ancestor = _getCommonAncestor(targetSpace);

  final resultMatrix = Matrix3D.fromIdentity();
  for (DisplayObject? obj = this; obj != ancestor; obj = obj.parent) {
    if (obj is DisplayObjectContainer3D) {
      resultMatrix.concat(obj.projectionMatrix3D);
    }
    resultMatrix.concat2D(obj!.transformationMatrix);
  }

  if (identical(targetSpace, ancestor)) return resultMatrix;

  final targetMatrix = Matrix3D.fromIdentity();
  for (DisplayObject? obj = targetSpace; obj != ancestor; obj = obj.parent) {
    if (obj is DisplayObjectContainer3D) {
      targetMatrix.concat(obj.projectionMatrix3D);
    }
    targetMatrix.concat2D(obj!.transformationMatrix);
  }

  targetMatrix.invert();
  resultMatrix.concat(targetMatrix);
  return resultMatrix;
}