void CameraTool::handleScroll(InputState& inputState) { if (inputState.modifierKeys() != ModifierKeys::MKNone && inputState.modifierKeys() != ModifierKeys::MKAlt) return; if (m_orbit) { const Renderer::Camera& camera = inputState.camera(); Plane orbitPlane(camera.direction(), m_orbitCenter); float maxForward = orbitPlane.intersectWithRay(Ray(camera.position(), camera.direction())) - 32.0f; float forward = inputState.scrollY() * moveSpeed(); if (maxForward < 0.0f) maxForward = 0.0f; if (forward > maxForward) forward = maxForward; CameraMoveEvent cameraEvent; cameraEvent.setForward(forward); postEvent(cameraEvent); } else { CameraMoveEvent cameraEvent; cameraEvent.setForward(inputState.scrollY() * moveSpeed()); cameraEvent.setRight(inputState.scrollX() * moveSpeed()); postEvent(cameraEvent); } }
void CameraTool::handleScroll(InputState& inputState) { if (inputState.modifierKeys() != ModifierKeys::MKNone && inputState.modifierKeys() != ModifierKeys::MKAlt) return; if (m_orbit) { const Renderer::Camera& camera = inputState.camera(); Planef orbitPlane(camera.direction(), m_orbitCenter); float maxForward = orbitPlane.intersectWithRay(Rayf(camera.position(), camera.direction())) - 32.0f; float forward = inputState.scrollY() * moveSpeed(false); if (maxForward < 0.0f) maxForward = 0.0f; if (forward > maxForward) forward = maxForward; CameraMoveEvent cameraEvent; cameraEvent.setForward(forward); postEvent(cameraEvent); } else { Preferences::PreferenceManager& prefs = Preferences::PreferenceManager::preferences(); const Renderer::Camera& camera = inputState.camera(); const Vec3f moveDirection = prefs.getBool(Preferences::CameraMoveInCursorDir) ? inputState.pickRay().direction : camera.direction(); const float distance = inputState.scrollY() * moveSpeed(false); const Vec3f moveVector = distance * moveDirection; CameraMoveEvent cameraEvent; cameraEvent.setForward(moveVector.dot(camera.direction())); cameraEvent.setRight(moveVector.dot(camera.right())); cameraEvent.setUp(moveVector.dot(camera.up())); postEvent(cameraEvent); } }
void CameraTool2D::doMouseScroll(const InputState& inputState) { if (zoom(inputState)) { const float speed = pref(Preferences::CameraMouseWheelInvert) ? -1.0f : 1.0f; if (inputState.scrollY() != 0.0f) { const Vec2f mousePos(static_cast<float>(inputState.mouseX()), static_cast<float>(inputState.mouseY())); const Vec3f oldWorldPos = m_camera.unproject(mousePos.x(), mousePos.y(), 0.0f); const float factor = 1.0f + inputState.scrollY() / 50.0f * speed; m_camera.zoom(factor); const Vec3f newWorldPos = m_camera.unproject(mousePos.x(), mousePos.y(), 0.0f); const Vec3f delta = newWorldPos - oldWorldPos; m_camera.moveBy(-delta); } } }