camera implementation (not yet tested)