오우거 애니메이션 튜토리얼 소스 코드 ITutorial01.h
ITutorial01.h
/*
-----------------------------------------------------------------------------
Filename: ITutorial01.h
-----------------------------------------------------------------------------
This source file is generated by the
___ _ __ __ _ _
/___\__ _ _ __ ___ /_\ _ __ _ __/ / /\ \ (_)______ _ _ __ __| |
// // _` | '__/ _ \ //_\\| '_ \| '_ \ \/ \/ / |_ / _` | '__/ _` |
/ \_// (_| | | | __/ / _ \ |_) | |_) \ /\ /| |/ / (_| | | | (_| |
\___/ \__, |_| \___| \_/ \_/ .__/| .__/ \/ \/ |_/___\__,_|_| \__,_|
|___/ |_| |_|
Ogre 1.7.x Application Wizard for VC9 (January 2010)
http://code.google.com/p/ogreappwizards/
-----------------------------------------------------------------------------
*/
#ifndef __ITutorial01_h_
#define __ITutorial01_h_
#include "BaseApplication.h"
class ITutorial01 : public BaseApplication
{
public:
ITutorial01(void);
virtual ~ITutorial01(void);
protected:
virtual void createScene(void);
virtual void createFrameListener(void);
virtual bool nextLocation(void);
virtual bool frameRenderingQueued(const Ogre::FrameEvent &evt);
Ogre::Real mDistance; // The distance the object has left to travel
Ogre::Vector3 mDirection; // The direction the object is moving
Ogre::Vector3 mDestination; // The destination the object is moving towards
Ogre::AnimationState *mAnimationState; // The current animation state of the object
Ogre::Entity *mEntity; // The Entity we are animating
Ogre::SceneNode *mNode; // The SceneNode that the Entity is attached to
std::deque<Ogre::Vector3> mWalkList; // The list of points we are walking to
Ogre::Real mWalkSpeed; // The speed at which the object is moving
};
#endif // #ifndef __ITutorial01_h_
ITutorial01.cpp
#include "ITutorial01.h"
using namespace std;
//-------------------------------------------------------------------------------------
ITutorial01::ITutorial01(void)
{
}
//-------------------------------------------------------------------------------------
ITutorial01::~ITutorial01(void)
{
}
//-------------------------------------------------------------------------------------
void ITutorial01::createScene(void)
{
// Set the default lighting.
mSceneMgr->setAmbientLight(Ogre::ColourValue(1.0f, 1.0f, 1.0f));
// Create the entity
mEntity = mSceneMgr->createEntity("Robot", "robot.mesh");
// Create the scene node
mNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("RobotNode", Ogre::Vector3(0.0f, 0.0f, 25.0f));
mNode->attachObject(mEntity);
// Create the walking list
mWalkList.push_back(Ogre::Vector3(550.0f, 0.0f, 50.0f ));
mWalkList.push_back(Ogre::Vector3(-100.0f, 0.0f, -200.0f));
mWalkList.push_back(Ogre::Vector3(250.0f, 0.0f, -200.0f));
mWalkList.push_back(Ogre::Vector3(250.0f, 0.0f, 100.0f));
// Create objects so we can see movement
Ogre::Entity *ent;
Ogre::SceneNode *node;
ent = mSceneMgr->createEntity("Knot1", "knot.mesh");
node = mSceneMgr->getRootSceneNode()->createChildSceneNode("Knot1Node",
Ogre::Vector3(0.0f, -10.0f, 25.0f));
node->attachObject(ent);
node->setScale(0.1f, 0.1f, 0.1f);
ent = mSceneMgr->createEntity("Knot2", "knot.mesh");
node = mSceneMgr->getRootSceneNode()->createChildSceneNode("Knot2Node",
Ogre::Vector3(550.0f, -10.0f, 50.0f));
node->attachObject(ent);
node->setScale(0.1f, 0.1f, 0.1f);
ent = mSceneMgr->createEntity("Knot3", "knot.mesh");
node = mSceneMgr->getRootSceneNode()->createChildSceneNode("Knot3Node",
Ogre::Vector3(-100.0f, -10.0f,-200.0f));
node->attachObject(ent);
node->setScale(0.1f, 0.1f, 0.1f);
ent = mSceneMgr->createEntity("Knot4", "knot.mesh");
node = mSceneMgr->getRootSceneNode()->createChildSceneNode("Knot4Node",
Ogre::Vector3(250.0f, -10.0f,-200.0f));
node->attachObject(ent);
node->setScale(0.1f, 0.1f, 0.1f);
ent = mSceneMgr->createEntity("Knot5", "knot.mesh");
node = mSceneMgr->getRootSceneNode()->createChildSceneNode("Knot5Node",
Ogre::Vector3(250.0f, -10.0f, 100.0f));
node->attachObject(ent);
node->setScale(0.1f, 0.1f, 0.1f);
// Set the camera to look at our handiwork
mCamera->setPosition(90.0f, 280.0f, 535.0f);
mCamera->pitch(Ogre::Degree(-30.0f));
mCamera->yaw(Ogre::Degree(-15.0f));
}
void ITutorial01::createFrameListener(void)
{
BaseApplication::createFrameListener();
// Set idle animation
mAnimationState = mEntity->getAnimationState("Idle");
mAnimationState->setLoop(true);
mAnimationState->setEnabled(true);
// Set default values for variables
mWalkSpeed = 35.0f;
mDirection = Ogre::Vector3::ZERO;
}
bool ITutorial01::nextLocation(void)
{
if (mWalkList.empty())
return false;
mDestination = mWalkList.front(); // this gets the front of the deque
mWalkList.pop_front(); // this removes the front of the deque
mDirection = mDestination - mNode->getPosition();
mDistance = mDirection.normalise();
return true;
}
bool ITutorial01::frameRenderingQueued(const Ogre::FrameEvent &evt)
{
mAnimationState->addTime(evt.timeSinceLastFrame);
if (mDirection == Ogre::Vector3::ZERO)
{
if (nextLocation())
{
// Set walking animation
mAnimationState = mEntity->getAnimationState("Walk");
mAnimationState->setLoop(true);
mAnimationState->setEnabled(true);
}
}
else
{
Ogre::Real move = mWalkSpeed * evt.timeSinceLastFrame;
mDistance -= move;
if (mDistance <= 0.0f)
{
mNode->setPosition(mDestination);
mDirection = Ogre::Vector3::ZERO;
// Set animation based on if the robot has another point to walk to.
if (! nextLocation())
{
// Set Idle animation
mAnimationState = mEntity->getAnimationState("Idle");
mAnimationState = mEntity->getAnimationState("Die");
mAnimationState->setLoop(true);
mAnimationState->setEnabled(true);
mDirection += 0.5f;
mDestination += 100.0f;
mWalkList.push_back(mDestination);
::Sleep(1000);
mAnimationState = mEntity->getAnimationState("Walk");
}
else
{
// Rotation Code will go here later
Ogre::Vector3 src = mNode->getOrientation() * Ogre::Vector3::UNIT_X;
if ((1.0f + src.dotProduct(mDirection)) < 0.0001f)
{
mNode->yaw(Ogre::Degree(180));
}
else
{
Ogre::Quaternion quat = src.getRotationTo(mDirection);
mNode->rotate(quat);
} // else
}
}
else
{
mNode->translate(mDirection * move);
} // else
} // if
mAnimationState->addTime(evt.timeSinceLastFrame);
return
BaseApplication::frameRenderingQueued(evt);
}
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
#define WIN32_LEAN_AND_MEAN
#include "windows.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
INT WINAPI WinMain( HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT )
#else
int main(int argc, char *argv[])
#endif
{
// Create application object
ITutorial01 app;
try {
app.go();
} catch( Ogre::Exception& e ) {
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
std::cerr << "An exception has occured: " <<
e.getFullDescription().c_str() << std::endl;
#endif
}
return 0;
}
#ifdef __cplusplus
}
#endif
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JUnit4에서의 예외 테스트를 편하게 친다!2018/6/13 추가 jUtaime은 JUnit5의 등장으로 그 사명을 마쳤습니다. 오랫동안 사랑 해 주셔서 감사합니다 m (_ _) m 여러분 JUnit5를 사용합시다. JUnit에서의 예외 검증 코드를 더 깔끔...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.