mirror of
https://github.com/OpenMW/openmw.git
synced 2025-02-03 13:45:34 +00:00
Implement getHalfExtents() for non-actor objects
This commit is contained in:
parent
088463ebe6
commit
8516aee6e0
3 changed files with 33 additions and 3 deletions
|
@ -49,6 +49,7 @@
|
|||
#include <boost/algorithm/string.hpp>
|
||||
|
||||
#include "../mwworld/cellstore.hpp"
|
||||
#include "../mwworld/class.hpp"
|
||||
#include "../mwgui/loadingscreen.hpp"
|
||||
#include "../mwbase/environment.hpp"
|
||||
#include "../mwbase/windowmanager.hpp"
|
||||
|
@ -1321,6 +1322,29 @@ namespace MWRender
|
|||
}
|
||||
}
|
||||
|
||||
osg::Vec3f RenderingManager::getHalfExtents(const MWWorld::ConstPtr& object) const
|
||||
{
|
||||
osg::Vec3f halfExtents(0, 0, 0);
|
||||
std::string modelName = object.getClass().getModel(object);
|
||||
if (modelName.empty())
|
||||
return halfExtents;
|
||||
|
||||
osg::ref_ptr<const osg::Node> node = mResourceSystem->getSceneManager()->getTemplate(modelName);
|
||||
osg::ComputeBoundsVisitor computeBoundsVisitor;
|
||||
computeBoundsVisitor.setTraversalMask(~(MWRender::Mask_ParticleSystem|MWRender::Mask_Effect));
|
||||
const_cast<osg::Node*>(node.get())->accept(computeBoundsVisitor);
|
||||
osg::BoundingBox bounds = computeBoundsVisitor.getBoundingBox();
|
||||
|
||||
if (bounds.valid())
|
||||
{
|
||||
halfExtents[0] = std::abs(bounds.xMax() - bounds.xMin()) / 2.f;
|
||||
halfExtents[1] = std::abs(bounds.yMax() - bounds.yMin()) / 2.f;
|
||||
halfExtents[2] = std::abs(bounds.zMax() - bounds.zMin()) / 2.f;
|
||||
}
|
||||
|
||||
return halfExtents;
|
||||
}
|
||||
|
||||
void RenderingManager::resetFieldOfView()
|
||||
{
|
||||
if (mFieldOfViewOverridden == true)
|
||||
|
|
|
@ -203,6 +203,8 @@ namespace MWRender
|
|||
/// reset a previous overrideFieldOfView() call, i.e. revert to field of view specified in the settings file.
|
||||
void resetFieldOfView();
|
||||
|
||||
osg::Vec3f getHalfExtents(const MWWorld::ConstPtr& object) const;
|
||||
|
||||
void exportSceneGraph(const MWWorld::Ptr& ptr, const std::string& filename, const std::string& format);
|
||||
|
||||
LandManager* getLandManager() const;
|
||||
|
|
|
@ -3339,12 +3339,16 @@ namespace MWWorld
|
|||
return mRendering->getTerrainHeightAt(worldPos);
|
||||
}
|
||||
|
||||
osg::Vec3f World::getHalfExtents(const ConstPtr& actor, bool rendering) const
|
||||
osg::Vec3f World::getHalfExtents(const ConstPtr& object, bool rendering) const
|
||||
{
|
||||
if (!object.getClass().isActor())
|
||||
return mRendering->getHalfExtents(object);
|
||||
|
||||
// Handle actors separately because of bodyparts
|
||||
if (rendering)
|
||||
return mPhysics->getRenderingHalfExtents(actor);
|
||||
return mPhysics->getRenderingHalfExtents(object);
|
||||
else
|
||||
return mPhysics->getHalfExtents(actor);
|
||||
return mPhysics->getHalfExtents(object);
|
||||
}
|
||||
|
||||
std::string World::exportSceneGraph(const Ptr &ptr)
|
||||
|
|
Loading…
Reference in a new issue