code: public void setRotation(Quaternion rotation) {
          this.m00 = 1.0f - 2.0f * rotation.getY() * rotation.getY() - 2.0f * rotation.getZ() * rotation.getZ();
          this.m10 = 2.0f * (rotation.getX() * rotation.getY() + rotation.getW() * rotation.getZ());
          this.m20 = 2.0f * (rotation.getX() * rotation.getZ() - rotation.getW() * rotation.getY());
  
          this.m01 = 2.0f * (rotation.getX() * rotation.getY() - rotation.getW() * rotation.getZ());
          this.m11 = 1.0f - 2.0f * rotation.getX() * rotation.getX() - 2.0f * rotation.getZ() * rotation.getZ();
          this.m21 = 2.0f * (rotation.getY() * rotation.getZ() + rotation.getW() * rotation.getX());
  
          this.m02 = 2.0f * (rotation.getX() * rotation.getZ() + rotation.getW() * rotation.getY());
          this.m12 = 2.0f * (rotation.getY() * rotation.getZ() - rotation.getW() * rotation.getX());
          this.m22 = 1.0f - 2.0f * rotation.getX() * rotation.getX() - 2.0f * rotation.getY() * rotation.getY();
      }
docs: Set the rotation for the object but do not change the translation.
  
  <p>This function changes only the elements of
  the matrix related to the rotation.
  The translation is not changed.
  
  <p>After a call to this function, the matrix will
  contains (? means any value, and r is the translation
  of the quaternion as a 3x3 matrix):
  <pre>
  [   r   r   r   ?   ]
  [   r   r   r   ?   ]
  [   r   r   r   ?   ]
  [   ?   ?   ?   ?   ]
  </pre>
  
  @param rotation the rotation
  @see #makeRotationMatrix(Quaternion)