Ogre播放动画
来源:互联网 发布:光棍儿 知乎 编辑:程序博客网 时间:2024/06/05 05:14
Ogre播放动画
ogre播放动画很简单,1、得到动画状态,2、设置enable为true,3、调用addtime
先来看代码:
class TutorialApplication : public BaseApplication{public: TutorialApplication(void); virtual ~TutorialApplication(void);protected: virtual void createScene(void);virtual bool frameRenderingQueued(const Ogre::FrameEvent& evt);private:bool nextLocation();std::deque<Ogre::Vector3> mWalkList;Ogre::Real mDistance;Ogre::Real mWalkSpd;Ogre::Vector3 mDirection;Ogre::Vector3 mDestination;Ogre::AnimationState* mAnimationState;Ogre::Entity* mEntity;Ogre::SceneNode* mNode;};
//---------------------------------------------------------------------------TutorialApplication::TutorialApplication(void):mDistance(0),mWalkSpd(70.0),mDirection(Ogre::Vector3::ZERO),mDestination(Ogre::Vector3::ZERO),mAnimationState(0),mEntity(0),mNode(0){}//---------------------------------------------------------------------------TutorialApplication::~TutorialApplication(void){}//---------------------------------------------------------------------------void TutorialApplication::createScene(void){ // Create your scene here :)mSceneMgr->setAmbientLight(Ogre::ColourValue(1.0,1.0,1.0));mEntity = mSceneMgr->createEntity("robot.mesh");mNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(Ogre::Vector3(0,0,25.0));mNode->attachObject(mEntity);mWalkList.push_back(Ogre::Vector3(550.0, 0, 50.0));mWalkList.push_back(Ogre::Vector3(-100.0, 0, -200.0));mWalkList.push_back(Ogre::Vector3(0, 0, 25.0));Ogre::Entity* ent;Ogre::SceneNode* node;ent = mSceneMgr->createEntity("knot.mesh");node = mSceneMgr->getRootSceneNode()->createChildSceneNode(Ogre::Vector3(0, -10.0, 25.0));node->attachObject(ent);node->setScale(0.1, 0.1, 0.1);ent = mSceneMgr->createEntity("knot.mesh");node = mSceneMgr->getRootSceneNode()->createChildSceneNode(Ogre::Vector3(550.0, -10.0, 50.0));node->attachObject(ent);node->setScale(0.1, 0.1, 0.1);ent = mSceneMgr->createEntity("knot.mesh");node = mSceneMgr->getRootSceneNode()->createChildSceneNode(Ogre::Vector3(-100.0, -10.0,-200.0));node->attachObject(ent);node->setScale(0.1, 0.1, 0.1);mCamera->setPosition(90.0, 280.0, 535.0);mCamera->pitch(Ogre::Degree(-30.0));mCamera->yaw(Ogre::Degree(-15.0));mAnimationState = mEntity->getAnimationState("Idle");mAnimationState->setLoop(true);mAnimationState->setEnabled(true);}bool TutorialApplication::frameRenderingQueued(const Ogre::FrameEvent& evt){if (mDirection == Ogre::Vector3::ZERO){if (nextLocation()){mAnimationState = mEntity->getAnimationState("Walk");mAnimationState->setLoop(true);mAnimationState->setEnabled(true);}}else{Ogre::Real move = mWalkSpd * evt.timeSinceLastFrame;mDistance -= move;if (mDistance <= 0.0){mNode->setPosition(mDestination);mDirection = Ogre::Vector3::ZERO;if (nextLocation()){Ogre::Vector3 src = mNode->getOrientation() * Ogre::Vector3::UNIT_X;if ((1.0 + src.dotProduct(mDirection)) < 0.0001){mNode->yaw(Ogre::Degree(180));}else{Ogre::Quaternion quat = src.getRotationTo(mDirection);mNode->rotate(quat);}}else{mAnimationState = mEntity->getAnimationState("Idle");mAnimationState->setLoop(true);mAnimationState->setEnabled(true);}}else{mNode->translate(move * mDirection);}}mAnimationState->addTime(evt.timeSinceLastFrame);return BaseApplication::frameRenderingQueued(evt);}bool TutorialApplication::nextLocation(){if (mWalkList.empty())return false;mDestination = mWalkList.front();mWalkList.pop_front();mDirection = mDestination - mNode->getPosition();mDistance = mDirection.normalise();return true;}这里创建了一个机器人,然后让它走路。走完了之后,切换动画为idle.
0 0
- Ogre播放动画
- OGRE骨骼动画的读取和播放
- OGRE 动画
- Ogre 动画
- OGRE动画
- OGRE动画
- Ogre 动画
- OGRE 动画
- OGRE动画
- OGRE 动画
- OGRE 动画
- Ogre动画
- OGRE动画
- OGRE动画系统--骨骼动画
- Ogre基本动画实例
- Ogre的骨骼动画
- Ogre骨骼动画融合
- Ogre 纹理动画
- Exponentiation
- [初学笔记]用for循环实现九九乘法表
- linux rz命令上传文件失败处理方法
- 测试你的 In-app Billing 程序
- mysql binlog 日志 --- 数据库的备份
- Ogre播放动画
- 怎么去掉Xcode工程中的某种类型的警告 Implicit conversion loses integer precision: 'NSInteger' (aka 'long') to 'int32
- 日经社説 20150727 ガス田合意の原点に回帰を
- PHP根据经纬度计算两点间实际距离
- Android Service的简介(自用)
- PriorityQueue ,ArrayList , 数组排序
- java多线程-专题-聊聊并发(六)ConcurrentLinkedQueue的实现原理分析
- java多线程设计模式--Balking不需要就算了
- UVALive 6912