Turning off hardware skinning

actorid
Jason Hooks 13 years ago
parent 762727308e
commit 1d2e77d947

@ -16,6 +16,7 @@
#include "../mwworld/environment.hpp"
#include "npcanimation.hpp"
#include "creatureanimation.hpp"
#include <openengine/bullet/physic.hpp>
namespace MWRender{
class Actors{

@ -410,6 +410,11 @@ namespace MWRender{
bone->setPosition(t);
if(bQuats)
bone->setOrientation(r);
if(iter == transformations->begin()){
trans = bone->_getDerivedPosition();
rotate = bone->_getDerivedOrientation();
}
skel->getManualBonesDirty();
skel->_updateTransforms();
skel->_notifyManualBonesDirty();

@ -8,6 +8,7 @@
#include "../mwworld/environment.hpp"
#include <components/nif/node.hpp>
#include <map>
#include <openengine/bullet/physic.hpp>
namespace MWRender{
@ -15,9 +16,12 @@ class Animation{
protected:
OEngine::Physic::PhysicEngine* engine;
OEngine::Render::OgreRenderer &mRend;
MWWorld::Environment& mEnvironment;
static std::map<std::string, int> mUniqueIDs;
Ogre::Quaternion rotate;
Ogre::Vector3 trans;
std::vector<std::vector<Nif::NiTriShapeCopy>* > shapeparts; //All the NiTriShape data that we need for animating an npc
float time;
@ -38,8 +42,6 @@ class Animation{
std::vector<Nif::NiTriShapeCopy>* shapes; //All the NiTriShapeData for this creature
std::vector<Ogre::Entity*> entityparts;
std::vector<Nif::NiKeyframeData>* transformations;
std::map<std::string,float> textmappings;

@ -259,6 +259,16 @@ void NpcAnimation::runAnimation(float timepassed){
}
handleAnimationTransforms();
//mEnvironment.mWorld->
/*if(base->hasSkeleton())
{
Ogre::Quaternion boneQuat = rotate;
Ogre::Vector3 boneTrans = trans;
mEnvironment.mWorld->setObjectPhysicsPosition(insert->getName(), boneTrans + insert->getPosition());
mEnvironment.mWorld->setObjectPhysicsRotation(insert->getName(), boneQuat * insert->getOrientation());
}*/
// handleAnimationTransforms(base);
//handleAnimationTransforms(hand);
//

@ -145,6 +145,12 @@ namespace MWWorld
void PhysicsSystem::rotateObject (const std::string& handle, const Ogre::Quaternion& rotation)
{
if (OEngine::Physic::PhysicActor* act = mEngine->getCharacter(handle))
{
// TODO very dirty hack to avoid crash during setup -> needs cleaning up to allow
// start positions others than 0, 0, 0
act->setRotation(btQuaternion(rotation.x, rotation.y, rotation.z, rotation.w));
}
}
void PhysicsSystem::scaleObject (const std::string& handle, float scale)

@ -685,4 +685,10 @@ namespace MWWorld
{
mRendering.skipAnimation (ptr);
}
void World::setObjectPhysicsRotation(const std::string& handle, Ogre::Quaternion quat){
mPhysics->rotateObject(handle, quat);
}
void World::setObjectPhysicsPosition(const std::string& handle, Ogre::Vector3 vec){
mPhysics->moveObject(handle, vec);
}
}

@ -218,6 +218,8 @@ namespace MWWorld
void skipAnimation (const MWWorld::Ptr& ptr);
///< Skip the animation for the given MW-reference for one frame. Calls to this function for
/// references that are currently not in the rendered scene should be ignored.
void setObjectPhysicsRotation(const std::string& handle,Ogre::Quaternion quat);
void setObjectPhysicsPosition(const std::string& handle,Ogre::Vector3 vector);
};
}

Loading…
Cancel
Save