Для начала вам нужно хранить некоторые данные о ротации в каком-то постоянном месте, лучше всего это использовать в качестве членов одного из ваших классов, но ради простого изменения предоставленного кода они могут быть статическими локальными переменными.
ofVec3f camPos = ofVec3f(0, 0, camDistance);
ofVec3f centerPos = ofVec3f(0, 0, 0);
//there is no need for these to be static unless ofGetWidth
//and ofGetHeight are expensive
float halfWidth = ofGetWidth()/2;
float halfHeight = ofGetHeight()/2;
//these accumlate all change
static float camRotX=0.0f;
static float camRotY=0.0f;
float rotX = (touch.x-halfHeight) / (halfWidth);
float rotY = (touch.y-halfHeight) / (halfHeight);
camRotX+=rotX;
camRotY+=rotY;
camPos.rotate( camRotY * 90, ofVec3f(1, 0, 0) );
camPos.rotate( camRotX * 180, ofVec3f(0, 1, 0) );
camPos += centerPos;
cam.setPosition( camPos );
cam.lookAt( centerPos );
Это может делать то, что вы хотите для щелчков мыши, но не будет хорошо работать для сенсорных событий или перетаскивания мыши. Для событий касания вы хотите записать местоположение начала касания и использовать его в качестве основы для поворота вместо использования центра экрана.