关于Mat4.getScalling返回值问题为何要在最后处理out.x *= -1

  • Creator 版本:2.4.3,3.0.0
    /**
     * !#zh 提取矩阵的缩放信息, 默认矩阵中的变换以 S->R->T 的顺序应用
     * !#en Scaling information extraction matrix, the matrix transform to the default sequential application S-> R-> T is
     * @method getScaling
     * @typescript
     * getScaling<Out extends IMat4Like, VecLike extends IVec3Like> (out: VecLike, mat: Out): VecLike
     * @static
     */
    static getScaling<Out extends IMat4Like, VecLike extends IVec3Like> (out: VecLike, mat: Out) {
        let m = mat.m;
        let m3 = m3_1.m;
        const m00 = m3[0] = m[0];
        const m01 = m3[1] = m[1];
        const m02 = m3[2] = m[2];
        const m04 = m3[3] = m[4];
        const m05 = m3[4] = m[5];
        const m06 = m3[5] = m[6];
        const m08 = m3[6] = m[8];
        const m09 = m3[7] = m[9];
        const m10 = m3[8] = m[10];
        out.x = Math.sqrt(m00 * m00 + m01 * m01 + m02 * m02);
        out.y = Math.sqrt(m04 * m04 + m05 * m05 + m06 * m06);
        out.z = Math.sqrt(m08 * m08 + m09 * m09 + m10 * m10);
        // account for refections 这句是什么意思
        if (Mat3.determinant(m3_1) < 0) { out.x *= -1; }
        return out;
    }

UE引擎也没有处理determinant小于0的情况