Is this line the only difference between <code>Vessel::draw</code> and <code>Shape::draw</code> ?
Could you instead set 
<code>m_objectToWorld = Translate(m_camera->m_position) * m_objectToWorld * m_camera->m_qRotation.generateMatrix();</code> 
in <code>Vessel::draw</code>, call <code>Shape::draw</code>, then reset <code>m_objectToWorld</code> ?