summaryrefslogtreecommitdiffstats
path: root/cameranodeobject.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cameranodeobject.cpp')
-rw-r--r--cameranodeobject.cpp41
1 files changed, 41 insertions, 0 deletions
diff --git a/cameranodeobject.cpp b/cameranodeobject.cpp
new file mode 100644
index 0000000..7fe7c4f
--- /dev/null
+++ b/cameranodeobject.cpp
@@ -0,0 +1,41 @@
+#include "cameranodeobject.h"
+
+#include <OgreRoot.h>
+#include <OgreSceneNode.h>
+#include <OgreCamera.h>
+
+static const Ogre::Vector3 initialPosition(0, 0, 300);
+
+CameraNodeObject::CameraNodeObject(Ogre::Camera *cam, QObject *parent) :
+ QObject(parent),
+ m_camera(cam),
+ m_yaw(0),
+ m_pitch(0),
+ m_zoom(1)
+{
+ m_node = Ogre::Root::getSingleton().getSceneManager("mySceneManager")->getRootSceneNode()->createChildSceneNode();
+ m_node->attachObject(cam);
+ cam->move(initialPosition);
+}
+
+void CameraNodeObject::resetPosition()
+{
+ m_yaw = 0;
+ m_pitch = 0;
+ updateRotation();
+}
+
+void CameraNodeObject::updateRotation()
+{
+ m_node->resetOrientation();
+ m_node->yaw(Ogre::Radian(Ogre::Degree(m_yaw)));
+ m_node->pitch(Ogre::Radian(Ogre::Degree(m_pitch)));
+}
+
+void CameraNodeObject::setZoom(qreal z)
+{
+ m_zoom = z;
+ m_node->resetOrientation();
+ m_camera->setPosition(initialPosition * (1 / m_zoom));
+ updateRotation();
+}