public void UpdateTransform(Transform objectTransform, DoubleVector3 objectOriginECEF, Vector3 translationOffsetECEF, Quaternion orientationECEF, float heightOffset, bool applyFlattening)
        {
            var cameraRelativePosition = (objectOriginECEF - m_cameraPositionECEF).ToSingleVector();

            cameraRelativePosition += m_up * heightOffset + translationOffsetECEF;

            if (applyFlattening && m_flattenScale != 1.0f)
            {
                var scaleVec      = new Vector3(1, m_flattenScale, 1);
                var localToECEF   = Quaternion.FromToRotation(Vector3.up, m_up);
                var ecefToLocal   = Quaternion.FromToRotation(m_up, Vector3.up);
                var innerRotation = ecefToLocal * orientationECEF;

                TransformHelper.ApplyTransform(objectTransform, cameraRelativePosition, scaleVec, localToECEF, innerRotation);
            }
            else
            {
                TransformHelper.ApplyTransform(objectTransform, cameraRelativePosition, Vector3.one, orientationECEF, Quaternion.identity);
            }
        }
        public void UpdateTransform(Transform objectTransform, DoubleVector3 objectOriginECEF, Vector3 translationOffsetECEF, Quaternion orientationECEF, float heightOffset, bool applyFlattening)
        {
            var finalPositionECEF = objectOriginECEF + translationOffsetECEF;
            var resourceUp        = m_frame.ECEFToLocalRotation * objectOriginECEF.normalized.ToSingleVector();
            var localPosition     = m_frame.ECEFToLocalSpace(finalPositionECEF) + Vector3.up * heightOffset;
            var localRotation     = m_frame.ECEFToLocalRotation * orientationECEF;

            if (applyFlattening && m_flattenScale != 1.0f)
            {
                var resourceToLocal = Quaternion.FromToRotation(resourceUp, Vector3.up);
                var localToResource = Quaternion.Inverse(resourceToLocal);
                var innerRotation   = resourceToLocal * localRotation;
                var scaleVec        = new Vector3(1, m_flattenScale, 1);

                TransformHelper.ApplyTransform(objectTransform, localPosition, scaleVec, localToResource, innerRotation);
            }
            else
            {
                TransformHelper.ApplyTransform(objectTransform, localPosition, Vector3.one, localRotation, Quaternion.identity);
            }
        }