Create a visual representation of the center of the orbit camera.

For debugging purposes.
openmw-39
Aesylwinn 9 years ago
parent c8bae38a8e
commit 2c894acd98

@ -3,8 +3,12 @@
#include <QKeyEvent>
#include <osg/Camera>
#include <osg/Geode>
#include <osg/Group>
#include <osg/Matrixd>
#include <osg/Quat>
#include <osg/Shape>
#include <osg/ShapeDrawable>
namespace CSVRender
{
@ -261,7 +265,7 @@ namespace CSVRender
Orbit Camera Controller
*/
OrbitCameraController::OrbitCameraController()
OrbitCameraController::OrbitCameraController(osg::Group* group)
: mInitialized(false)
, mFast(false)
, mLeft(false)
@ -271,7 +275,10 @@ namespace CSVRender
, mRollLeft(false)
, mRollRight(false)
, mCenter(0,0,0)
, mCenterNode(new osg::PositionAttitudeTransform())
{
group->addChild(mCenterNode);
createShape();
}
bool OrbitCameraController::handleKeyEvent(QKeyEvent* event, bool pressed)
@ -383,6 +390,8 @@ namespace CSVRender
if (mRollRight)
roll(rotDist);
mCenterNode->setPosition(mCenter);
lookAtCenter();
// Normalize the matrix to counter drift
@ -409,6 +418,19 @@ namespace CSVRender
mInitialized = true;
}
void OrbitCameraController::createShape()
{
const float boxWidth = 100;
osg::ref_ptr<osg::Box> box = new osg::Box(osg::Vec3f(0, 0, 0), boxWidth);
osg::ref_ptr<osg::ShapeDrawable> drawable = new osg::ShapeDrawable(box);
drawable->setColor(osg::Vec4f(0.f, 0.9f, 0.f, 1.f));
osg::ref_ptr<osg::Geode> geode = new osg::Geode();
geode->addChild(drawable);
mCenterNode->addChild(geode);
}
void OrbitCameraController::rotateHorizontal(double value)
{
osg::Vec3d position = getCamera()->getViewMatrix().getTrans();

@ -4,6 +4,7 @@
#include <string>
#include <osg/BoundingBox>
#include <osg/PositionAttitudeTransform>
#include <osg/ref_ptr>
#include <osg/Vec3d>
@ -12,6 +13,7 @@ class QKeyEvent;
namespace osg
{
class Camera;
class Group;
}
namespace CSVRender
@ -97,7 +99,7 @@ namespace CSVRender
{
public:
OrbitCameraController();
OrbitCameraController(osg::Group* group);
bool handleKeyEvent(QKeyEvent* event, bool pressed);
bool handleMouseMoveEvent(std::string mode, int x, int y);
@ -109,6 +111,7 @@ namespace CSVRender
void onActivate();
void initialize();
void createShape();
void rotateHorizontal(double value);
void rotateVertical(double value);
@ -121,6 +124,8 @@ namespace CSVRender
bool mInitialized;
bool mFast, mLeft, mRight, mUp, mDown, mRollLeft, mRollRight;
osg::Vec3d mCenter;
osg::ref_ptr<osg::PositionAttitudeTransform> mCenterNode;
};
}

@ -164,7 +164,7 @@ SceneWidget::SceneWidget(boost::shared_ptr<Resource::ResourceSystem> resourceSys
, mPrevMouseX(0)
, mPrevMouseY(0)
, mFreeCamControl(new FreeCameraController())
, mOrbitCamControl(new OrbitCameraController())
, mOrbitCamControl(new OrbitCameraController(mRootNode))
, mCurrentCamControl(mFreeCamControl.get())
, mCamPositionSet(false)
{

Loading…
Cancel
Save