34 #include <OgreCamera.h>
35 #include <OgrePlane.h>
36 #include <OgreQuaternion.h>
38 #include <OgreSceneNode.h>
40 #include <OgreViewport.h>
64 mouse_ray.setOrigin(
target_scene_node_->convertWorldToLocalPosition(mouse_ray.getOrigin()));
65 mouse_ray.setDirection(
target_scene_node_->convertWorldToLocalOrientation(Ogre::Quaternion::IDENTITY) *
66 mouse_ray.getDirection());
68 Ogre::Plane ground_plane(Ogre::Vector3::UNIT_Z, 0);
70 std::pair<bool, Ogre::Real> intersection = mouse_ray.intersects(ground_plane);
71 if (!intersection.first)
76 intersection_3d = mouse_ray.getPoint(intersection.second);
84 setStatus(
"<b>Left-Click:</b> Move X/Y. <b>Right-Click:</b>: Zoom.");
88 setStatus(
"<b>Left-Click:</b> Rotate. <b>Middle-Click:</b> Move X/Y. <b>Right-Click:</b>: Move Z. "
89 " <b>Shift</b>: More options.");
96 if (event.
type == QEvent::MouseButtonPress)
101 else if (event.
type == QEvent::MouseButtonRelease)
106 else if (event.
type == QEvent::MouseMove)
108 diff_x =
event.x -
event.last_x;
109 diff_y =
event.y -
event.last_y;
117 pitch(-diff_y * 0.005);
123 int width =
event.viewport->getActualWidth();
124 int height =
event.viewport->getActualHeight();
126 Ogre::Ray mouse_ray =
event.viewport->getCamera()->getCameraToViewportRay(event.
x / (
float)width,
127 event.
y / (
float)height);
129 Ogre::Ray last_mouse_ray =
event.viewport->getCamera()->getCameraToViewportRay(
130 event.
last_x / (
float)width, event.
last_y / (
float)height);
132 Ogre::Vector3 last_intersect, intersect;
137 Ogre::Vector3 motion = last_intersect - intersect;
142 float motion_distance_limit = 1;
143 if (motion.length() > motion_distance_limit)
146 motion *= motion_distance_limit;
153 else if (event.
right())
165 int diff =
event.wheel_delta;
180 Ogre::Camera* source_camera = source_view->
getCamera();
182 Ogre::Ray camera_dir_ray(source_camera->getRealPosition(), source_camera->getRealDirection());
183 Ogre::Ray camera_down_ray(source_camera->getRealPosition(), -1.0 * source_camera->getRealUp());
189 float l_a = source_camera->getPosition().distance(b);
190 float l_b = source_camera->getPosition().distance(a);
195 camera_dir_ray.setOrigin(source_camera->getRealPosition() -
197 Ogre::Vector3 new_focal_point;
215 Ogre::Vector3 camera_position =
camera_->getPosition();
216 Ogre::Vector3 new_focal_point =
218 new_focal_point.z = 0;