横回転(左)はこれで
cam.dirX += cam.speed;
cam.posX = cam.range * sinf(cam.dirX * PI / 180.0f);
cam.posZ = cam.range * cosf(cam.dirX * PI / 180.0f);
縦回転(上)はこれなんだが
cam.dirY += cam.speed;
cam.posY = cam.range * sinf(cam.dirY * PI / 180.0f);
cam.posZ = cam.range * cosf(cam.dirY * PI / 180.0f);

縦回転するときだけX軸にぐにゃっと動きながら回転するんだよなぁ、多分>>761の通りミスかも
出先だから詳しくなくてすまん、あとdirは角度