13 ogre 3d animation

Upload: suci-wulandari

Post on 07-Apr-2018

264 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/6/2019 13 Ogre 3D Animation

    1/18

  • 8/6/2019 13 Ogre 3D Animation

    2/18

    Pendahuluany Di pelajaran ini, pada dasarnya Ogre tidak membuat

    algoritma untuk animasi dengan sendirinya.

    y Animasi dibuat dari 3D modelling tools yang lainseperti 3ds max, blender dlsb.

    y Yang dilakukan hanya mentranslasi dan merotasikanentitas yang memiliki animasi.

  • 8/6/2019 13 Ogre 3D Animation

    3/18

    Persiapan Animasiy Buat aplikasi dengan nama Ogre MoveDemoApplication

    using namespace std;

    class MoveDemoListener : public ExampleFrameListener

    { public:

    MoveDemoListener(RenderWindow* win, Camera* cam, SceneNode *sn, Entity *ent,

    deque &walk)

    : ExampleFrameListener(win, cam, false, false), mNode(sn), mEntity(ent), mWalkList(walk)

    { } // MoveDemoListener/* This function is called to start the object moving to the next position

    in mWalkList. */

    bool nextLocation()

    { return true; } // nextLocation()

    bool frameStarted(const FrameEvent &evt)

    { return ExampleFrameListener::frameStarted(evt); }

    protected:

    Real mDistance; // sisa jarak yang masih harus ditempuhVector3 mDirection, mDestination; // vektor arah dan lokasi tujuanAnimationState *mAnimationState; // State animasi dari objek

    Entity *mEntity; // Entitas yang dianimasikan

    SceneNode *mNode; // SceneNode tempat Entity diletakkan

    std::deque mWalkList; // list lokasi yang akan dilalui

    Real mWalkSpeed; // kecepatan entitas berjalan

    };

    Extend ExampleFrameListener

    Jalur pergerakan animasi

  • 8/6/2019 13 Ogre 3D Animation

    4/18

    class MoveDemoApplication : public ExampleApplication{protected:public:

    MoveDemoApplication(){ }

    ~MoveDemoApplication(){ }

    protected:Entity *mEntity; // entitas dari objek yang akan dianimasikanSceneNode *mNode; // SceneNode dari object yang bergerakstd::deque mWalkList; // deque yang berisi titik pergerakanvoid createScene(void)

    { }void createFrameListener(void){

    mFrameListener= new MoveDemoListener(mWindow, mCamera, mNode,mEntity, mWalkList);

    mFrameListener->showDebugOverlay(true);mRoot->addFrameListener(mFrameListener);

    }};

    Persiapan Animasi

  • 8/6/2019 13 Ogre 3D Animation

    5/18

    Skenarioy Kita letakkan objek yang akan bergerak.

    y Kita letakkan objek lain sebagai acuan agar terlihat

    bahwa objek telah bergerak.y Kita set list point pergerakan objek.

    y Kita amati dengan kamera berada di lokasi ideal.

  • 8/6/2019 13 Ogre 3D Animation

    6/18

    Meletakkan Objeky Tambahkan kode berikut pada MoveDemoApplication::createScene()

    // Set the default lighting.

    mSceneMgr->setAmbientLight(ColourValue(1.0f, 1.0f, 1.0f));

    // Create the entitymEntity = mSceneMgr->createEntity("Robot", "robot.mesh");

    // Create the scene node

    mNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("RobotNode",

    Vector3(0.0f, 0.0f, 25.0f));

    mNode->attachObject(mEntity);

    Buat pencahayaan environtment

    menjadi terang

  • 8/6/2019 13 Ogre 3D Animation

    7/18

    Menambahkan list pergerakany Tambahkan kode berikut pada MoveDemoApplication::createScene()

    // Create the walking list

    mWalkList.push_back(Vector3(550.0f, 0.0f, 50.0f ));

    mWalkList.push_back(Vector3(-100.0f, 0.0f, -200.0f));

    // bisa kita tambahkan lagi sesuka kita, atau dari hasil algoritma A*

  • 8/6/2019 13 Ogre 3D Animation

    8/18

    Menambahkan Objek lain (acuan)y Tambahkan kode berikut pada MoveDemoApplication::createScene()

    // Create objects so we can see movement

    Entity *ent; SceneNode *node;

    ent = mSceneMgr->createEntity("Knot1", "knot.mesh");

    node = mSceneMgr->getRootSceneNode()->createChildSceneNode("Knot1Node",

    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",

    Vector3(550.0f, -10.0f, 50.0f));

    node->attachObject(ent);

    node->setScale(0.1f, 0.1f, 0.1f);

  • 8/6/2019 13 Ogre 3D Animation

    9/18

    Meletakkan Kameray Tambahkan kode berikut pada TutorialApplication:: createCamera()

    // Set the camera to look at our handiworkmCamera->setPosition(90.0f, 280.0f, 535.0f);

    mCamera->pitch(Degree(-30.0f));mCamera->yaw(Degree(-15.0f));

  • 8/6/2019 13 Ogre 3D Animation

    10/18

    Animasiy Tambahkan kode berikut pada kontructor MoveDemoListener

    // Set idle animationmAnimationState = ent->getAnimationState("Idle");

    mAnimationState->setLoop(true);mAnimationState->setEnabled(true);

    y Kompile dan jalankan aplikasi.

    // perlu kita update animationstate dengan evt.timeSinceLastFrame// pada MoveDemoListener::frameStarted

    mAnimationState->addTime(evt.timeSinceLastFrame);

  • 8/6/2019 13 Ogre 3D Animation

    11/18

    Menggerakkan Roboty Kita ganti konstruktor pada MoveDemoListener dengan

    // Set default values for variablesmWalkSpeed = 35.0f; // kecepatan pergerakan

    mDirection = Vector3::ZERO; // untuk status tidak bergerak ke manapun.

    y Sedang pada MoveDemoListener ::frameStarted kita tambahkandengan kode berikut (sebelum AnimationState::addTime) :

    if (mDirection == Vector3::ZERO){

    if (nextLocation()){

    // Set walking animationmAnimationState = mEntity->getAnimationState("Walk");mAnimationState->setLoop(true);mAnimationState->setEnabled(true);

    }}

  • 8/6/2019 13 Ogre 3D Animation

    12/18

    Mengimplementasikan

    nextLocation()y nextLocation berfungsi untuk mengecek apakah objek

    masih memiliki point untuk tujuan pergerakan atau tidak.

    y Tambahkan kode berikut pada nextLocation()if (mWalkList.empty())

    return false;

    mDestination = mWalkList.front(); // mengambil nilai terdepan dequemWalkList.pop_front(); // membuang front dari deque

    mDirec

    tion = mDestination - mNode->getPosition();mDistance = mDirection.normalise();

    // mengubah arah wajah robotVector3 src = mNode->getOrientation() * Vector3::UNIT_X;Ogre::Quaternion quat = src.getRotationTo(mDirection);mNode->rotate(quat);

  • 8/6/2019 13 Ogre 3D Animation

    13/18

    Kembali ke menggerakkan RobotyRobot yang ada belum berjalan, meski animasi sudah berubah.Untuk membuat robot berjalan, kita tambahkan kode berikutpada MoveDemoListener::frameStarted();

    else{

    Real move = mWalkSpeed * evt.timeSinceLastFrame;

    mDistance -= move;if (mDistance setPosition(mDestination);mDirection = Vector3::ZERO;// Set animation based on if the robot has another point to walk to.if (! nextLocation())

    {// Set Idle animationmAnimationState = mEntity->getAnimationState("Idle");mAnimationState->setLoop(true);mAnimationState->setEnabled(true);

    }

  • 8/6/2019 13 Ogre 3D Animation

    14/18

    Kembali ke menggerakkan Robot

    y Lanjutan

    else{

    // Rotation Code will go here later

    }}else{

    mNode->translate(mDirection * move);} // else

    } // if

    if (mWalkList.empty())return false;

  • 8/6/2019 13 Ogre 3D Animation

    15/18

    Agung Toto Wibowo

    http://gameprogramming.blog.ittelkom.ac.id/blog/

    Materi tutorial diambil dari wiki Ogre :

    http://www.ogre3d.org/wiki/index.php/Ogre_Tutorials

  • 8/6/2019 13 Ogre 3D Animation

    16/18

    Blender dan Ogrey Objek yang dibuat di blender dapat diload ke Ogre.

    y Format pada ogre *.mesh, blender *.blend

    y Butuh konversi (meshes exporter)http://www.ogre3d.org/wiki/index.php/Blender_Exporter

    y Download dan integrasikan Blender Exporter.

    y

    Copy ogremeshesexporter.py dan subfolders ke lokasi...\blender\.blender\scripts.

    y Install Python 2.5.4 (atau lebih tinggi) yang dibutuhkanoleh exporter.

  • 8/6/2019 13 Ogre 3D Animation

    17/18

    BlenderMeshes Exporter

  • 8/6/2019 13 Ogre 3D Animation

    18/18

    Melihat hasil konversiy Aplikasi ceguimeshviewer

    y Informasi lebih lanjut pada link :

    http://www.ogre3d.org/forums/viewtopic.php?p=136714y Mengintegrasikan langsung ke kode Ogre dengan

    kode.