From 1c0e3a648839bd2121573c6077e9b2652d03cfbb Mon Sep 17 00:00:00 2001 From: scrawl Date: Thu, 23 Apr 2015 23:50:46 +0200 Subject: [PATCH] rotateObject, scaleObject --- apps/openmw/mwrender/objects.cpp | 19 ------------------- apps/openmw/mwrender/renderingmanager.cpp | 20 ++++++++++++++++++++ apps/openmw/mwrender/renderingmanager.hpp | 5 +++++ apps/openmw/mwworld/scene.cpp | 23 +++++++---------------- apps/openmw/mwworld/scene.hpp | 2 -- apps/openmw/mwworld/worldimp.cpp | 17 +++++++---------- 6 files changed, 39 insertions(+), 47 deletions(-) diff --git a/apps/openmw/mwrender/objects.cpp b/apps/openmw/mwrender/objects.cpp index 4b1fa6d5b..be21b2bec 100644 --- a/apps/openmw/mwrender/objects.cpp +++ b/apps/openmw/mwrender/objects.cpp @@ -102,25 +102,6 @@ void Objects::insertBegin(const MWWorld::Ptr& ptr) const float *f = ptr.getRefData().getPosition().pos; insert->setPosition(osg::Vec3(f[0], f[1], f[2])); - insert->setScale(osg::Vec3(ptr.getCellRef().getScale(), ptr.getCellRef().getScale(), ptr.getCellRef().getScale())); - - // Convert MW rotation to a quaternion: - f = ptr.getCellRef().getPosition().rot; - - // Rotate around X axis - osg::Quat xr(-f[0], osg::Vec3(1,0,0)); - - // Rotate around Y axis - osg::Quat yr(-f[1], osg::Vec3(0,1,0)); - - // Rotate around Z axis - osg::Quat zr(-f[2], osg::Vec3(0,0,1)); - - // Rotates first around z, then y, then x - if (ptr.getClass().isActor()) - insert->setAttitude(zr); - else - insert->setAttitude(zr*yr*xr); ptr.getRefData().setBaseNode(insert); } diff --git a/apps/openmw/mwrender/renderingmanager.cpp b/apps/openmw/mwrender/renderingmanager.cpp index 5199e6e12..be23ebc2f 100644 --- a/apps/openmw/mwrender/renderingmanager.cpp +++ b/apps/openmw/mwrender/renderingmanager.cpp @@ -7,6 +7,7 @@ #include #include #include +#include #include @@ -211,6 +212,25 @@ namespace MWRender mSky->update(dt); } + void RenderingManager::rotateObject(const MWWorld::Ptr &ptr, const osg::Quat& rot) + { + //if(ptr.getRefData().getHandle() == mCamera->getHandle() && + // !mCamera->isVanityOrPreviewModeEnabled()) + // mCamera->rotateCamera(-rot, false); + + ptr.getRefData().getBaseNode()->setAttitude(rot); + } + + void RenderingManager::moveObject(const MWWorld::Ptr &ptr, const osg::Vec3f &pos) + { + ptr.getRefData().getBaseNode()->setPosition(pos); + } + + void RenderingManager::scaleObject(const MWWorld::Ptr &ptr, const osg::Vec3f &scale) + { + ptr.getRefData().getBaseNode()->setScale(scale); + } + void RenderingManager::spawnEffect(const std::string &model, const std::string &texture, const osg::Vec3f &worldPosition, float scale) { mEffectManager->addEffect(model, texture, worldPosition, scale); diff --git a/apps/openmw/mwrender/renderingmanager.hpp b/apps/openmw/mwrender/renderingmanager.hpp index 230885cd3..c47317608 100644 --- a/apps/openmw/mwrender/renderingmanager.hpp +++ b/apps/openmw/mwrender/renderingmanager.hpp @@ -57,6 +57,11 @@ namespace MWRender void removeCell(const MWWorld::CellStore* store); + // TODO rename to setRotation/setPosition/setScale, along with the World equivalents + void rotateObject(const MWWorld::Ptr& ptr, const osg::Quat& rot); + void moveObject(const MWWorld::Ptr& ptr, const osg::Vec3f& pos); + void scaleObject(const MWWorld::Ptr& ptr, const osg::Vec3f& scale); + void setSkyEnabled(bool enabled); SkyManager* getSkyManager(); diff --git a/apps/openmw/mwworld/scene.cpp b/apps/openmw/mwworld/scene.cpp index ef9e5792b..4f689ee59 100644 --- a/apps/openmw/mwworld/scene.cpp +++ b/apps/openmw/mwworld/scene.cpp @@ -42,7 +42,7 @@ namespace //ptr.getClass().insertObject (ptr, model, physics); } - void updateObjectLocalRotation (const MWWorld::Ptr& ptr, MWWorld::PhysicsSystem& physics, + void updateObjectLocalRotation (const MWWorld::Ptr& ptr, /*MWWorld::PhysicsSystem& physics,*/ MWRender::RenderingManager& rendering) { if (ptr.getRefData().getBaseNode() != NULL) @@ -60,7 +60,7 @@ namespace if (!ptr.getClass().isActor()) rot = rot * osg::Quat(y, osg::Vec3(0,-1,0)) * osg::Quat(x, osg::Vec3(-1,0,0)); - ptr.getRefData().getBaseNode()->setAttitude(rot * worldRotQuat); + rendering.rotateObject(ptr, rot * worldRotQuat); //physics.rotateObject(ptr); } } @@ -102,12 +102,12 @@ namespace try { addObject(ptr, /*mPhysics, */mRendering); - //updateObjectLocalRotation(ptr, mPhysics, mRendering); + updateObjectLocalRotation(ptr, /*mPhysics,*/ mRendering); if (ptr.getRefData().getBaseNode()) { float scale = ptr.getCellRef().getScale(); ptr.getClass().adjustScale(ptr, scale); - //mRendering.scaleObject(ptr, Ogre::Vector3(scale)); + mRendering.scaleObject(ptr, osg::Vec3f(scale, scale, scale)); } ptr.getClass().adjustPosition (ptr, false); } @@ -130,16 +130,7 @@ namespace MWWorld void Scene::updateObjectLocalRotation (const Ptr& ptr) { - //::updateObjectLocalRotation(ptr, *mPhysics, mRendering); - } - - void Scene::updateObjectRotation (const Ptr& ptr) - { - if(ptr.getRefData().getBaseNodeOld() != 0) - { - //mRendering.rotateObject(ptr); - //mPhysics->rotateObject(ptr); - } + ::updateObjectLocalRotation(ptr, /* *mPhysics,*/ mRendering); } void Scene::getGridCenter(int &cellX, int &cellY) @@ -563,8 +554,8 @@ namespace MWWorld try { addObject(ptr, /* *mPhysics, */mRendering); - //MWBase::Environment::get().getWorld()->rotateObject(ptr, 0, 0, 0, true); - //MWBase::Environment::get().getWorld()->scaleObject(ptr, ptr.getCellRef().getScale()); + MWBase::Environment::get().getWorld()->rotateObject(ptr, 0, 0, 0, true); + MWBase::Environment::get().getWorld()->scaleObject(ptr, ptr.getCellRef().getScale()); } catch (std::exception& e) { diff --git a/apps/openmw/mwworld/scene.hpp b/apps/openmw/mwworld/scene.hpp index 4e8f6a11b..0ae1ff4da 100644 --- a/apps/openmw/mwworld/scene.hpp +++ b/apps/openmw/mwworld/scene.hpp @@ -117,8 +117,6 @@ namespace MWWorld void updateObjectLocalRotation (const Ptr& ptr); - void updateObjectRotation (const Ptr& ptr); - bool isCellActive(const CellStore &cell); Ptr searchPtrViaHandle (const std::string& handle); diff --git a/apps/openmw/mwworld/worldimp.cpp b/apps/openmw/mwworld/worldimp.cpp index a2d40930b..07c3b1b16 100644 --- a/apps/openmw/mwworld/worldimp.cpp +++ b/apps/openmw/mwworld/worldimp.cpp @@ -1217,9 +1217,9 @@ namespace MWWorld ptr.getRefData().setCount(0); } } - if (haveToMove && ptr.getRefData().getBaseNodeOld()) + if (haveToMove && ptr.getRefData().getBaseNode()) { - //mRendering->moveObject(ptr, vec); + mRendering->moveObject(ptr, osg::Vec3f(vec.x, vec.y, vec.z)); //mPhysics->moveObject (ptr); } if (isPlayer) @@ -1256,9 +1256,9 @@ namespace MWWorld ptr.getCellRef().setScale(scale); ptr.getClass().adjustScale(ptr,scale); - if(ptr.getRefData().getBaseNodeOld() == 0) + if(ptr.getRefData().getBaseNode() == 0) return; - //mRendering->scaleObject(ptr, Vector3(scale,scale,scale)); + mRendering->scaleObject(ptr, osg::Vec3f(scale,scale,scale)); //mPhysics->scaleObject(ptr); } @@ -1307,13 +1307,10 @@ namespace MWWorld ptr.getRefData().setPosition(pos); - if(ptr.getRefData().getBaseNodeOld() == 0) + if(ptr.getRefData().getBaseNode() == 0) return; - if (ptr.getClass().isActor()) - mWorldScene->updateObjectRotation(ptr); - else - mWorldScene->updateObjectLocalRotation(ptr); + mWorldScene->updateObjectLocalRotation(ptr); } void World::localRotateObject (const Ptr& ptr, float x, float y, float z) @@ -1329,7 +1326,7 @@ namespace MWWorld ptr.getRefData().setLocalRotation(rot); - if (ptr.getRefData().getBaseNodeOld() != 0) + if (ptr.getRefData().getBaseNode() != 0) { mWorldScene->updateObjectLocalRotation(ptr); }