public Matrix4f translationRotateScale(float tx, float ty, float tz, 
                                           float qx, float qy, float qz, float qw, 
                                           float sx, float sy, float sz) {
        float dqx = qx + qx;
        float dqy = qy + qy;
        float dqz = qz + qz;
        float q00 = dqx * qx;
        float q11 = dqy * qy;
        float q22 = dqz * qz;
        float q01 = dqx * qy;
        float q02 = dqx * qz;
        float q03 = dqx * qw;
        float q12 = dqy * qz;
        float q13 = dqy * qw;
        float q23 = dqz * qw;
        this._m00(sx - (q11 + q22) * sx);
        this._m01((q01 + q23) * sx);
        this._m02((q02 - q13) * sx);
        this._m03(0.0f);
        this._m10((q01 - q23) * sy);
        this._m11(sy - (q22 + q00) * sy);
        this._m12((q12 + q03) * sy);
        this._m13(0.0f);
        this._m20((q02 + q13) * sz);
        this._m21((q12 - q03) * sz);
        this._m22(sz - (q11 + q00) * sz);
        this._m23(0.0f);
        this._m30(tx);
        this._m31(ty);
        this._m32(tz);
        this._m33(1.0f);
        boolean one = Math.abs(sx) == 1.0f && Math.abs(sy) == 1.0f && Math.abs(sz) == 1.0f;
        _properties(PROPERTY_AFFINE | (one ? PROPERTY_ORTHONORMAL : 0));
        return this;
    }
public Matrix4f translationRotateScale ( float tx , float ty , float tz , float qx , float qy , float qz , float qw , float sx , float sy , float sz ) { float dqx = qx + qx ; float dqy = qy + qy ; float dqz = qz + qz ; float q00 = dqx * qx ; float q11 = dqy * qy ; float q22 = dqz * qz ; float q01 = dqx * qy ; float q02 = dqx * qz ; float q03 = dqx * qw ; float q12 = dqy * qz ; float q13 = dqy * qw ; float q23 = dqz * qw ; this . _m00 ( sx - ( q11 + q22 ) * sx ) ; this . _m01 ( ( q01 + q23 ) * sx ) ; this . _m02 ( ( q02 - q13 ) * sx ) ; this . _m03 ( 0.0f ) ; this . _m10 ( ( q01 - q23 ) * sy ) ; this . _m11 ( sy - ( q22 + q00 ) * sy ) ; this . _m12 ( ( q12 + q03 ) * sy ) ; this . _m13 ( 0.0f ) ; this . _m20 ( ( q02 + q13 ) * sz ) ; this . _m21 ( ( q12 - q03 ) * sz ) ; this . _m22 ( sz - ( q11 + q00 ) * sz ) ; this . _m23 ( 0.0f ) ; this . _m30 ( tx ) ; this . _m31 ( ty ) ; this . _m32 ( tz ) ; this . _m33 ( 1.0f ) ; boolean one = Math . abs ( sx ) == 1.0f && Math . abs ( sy ) == 1.0f && Math . abs ( sz ) == 1.0f ; _properties ( PROPERTY_AFFINE | ( one ? PROPERTY_ORTHONORMAL : 0 ) ) ; return this ; }
Set <code>this</code> matrix to <code>T * R * S</code>, where <code>T</code> is a translation by the given <code>(tx, ty, tz)</code>,
<code>R</code> is a rotation transformation specified by the quaternion <code>(qx, qy, qz, qw)</code>, and <code>S</code> is a scaling transformation
which scales the three axes x, y and z by <code>(sx, sy, sz)</code>.
<p>
When transforming a vector by the resulting matrix the scaling transformation will be applied first, then the rotation and
at last the translation.
<p>
When used with a right-handed coordinate system, the produced rotation will rotate a vector
counter-clockwise around the rotation axis, when viewing along the negative axis direction towards the origin.
When used with a left-handed coordinate system, the rotation is clockwise.
<p>
This method is equivalent to calling: <code>translation(tx, ty, tz).rotate(quat).scale(sx, sy, sz)</code>

@see #translation(float, float, float)
@see #rotate(Quaternionfc)
@see #scale(float, float, float)

@param tx
the number of units by which to translate the x-component
@param ty
the number of units by which to translate the y-component
@param tz
the number of units by which to translate the z-component
@param qx
the x-coordinate of the vector part of the quaternion
@param qy
the y-coordinate of the vector part of the quaternion
@param qz
the z-coordinate of the vector part of the quaternion
@param qw
the scalar part of the quaternion
@param sx
the scaling factor for the x-axis
@param sy
the scaling factor for the y-axis
@param sz
the scaling factor for the z-axis
@return this