Kamis, 26 Mei 2011

Membuat Animasi dengan Ogre


Kita akan membuat animasi bergerak pada Ogre sebelumnya kita harus mengkonversi objek dari .blend menjadi .mesh. setelah itu kita baru bias membuat animasi bergerak.

Keterangan :

  1. Pada sintaks di bawah kita menggunakan objek yang bernama sonic.mesh . Untuk objek tersebut sebelumnya kita pindahkan ke folder ogresdk yaitu C;/Ogresdk/media/models/ .

mEntity = mSceneMgr->createEntity( "Shinobi","shinobi.mesh" );

mNode = mSceneMgr->getRootSceneNode()->createChildSceneNode( "ShinobiNode",Vector3(90,0,0));

mNode->attachObject( mEntity );

mNode->setScale(14,14,14);

mNode->yaw(Degree(-90));

  1. Cahaya sangat penting dalam grafik komputer terutama bagi Ogre saat melakukan proses rendering. Karena jika objek yang digunakan tidak diberi cahaya maka hanya akan terlihat seperti objek 2D, namun berbeda jika objek yang digunakan sudah memiliki texture material sendiri bukan hanya sekedar warna dasar. Untuk membuat cahaya pertama ditentukan terlebih dahulu warna cahaya tersebut :

mSceneMgr->setAmbientLight( ColourValue( 1, 1, 1 ) );

  1. Agar ketika proses rendering selesai dan hasil yang ditunjukkan dapat langsung menunjukkan objek yang kita masukkan maka posisi dan arah pandang kamera dapat disesuaikan dengan keinginan kita. Hal ini di lakukan agar dapat menimbulkan kesan baik dan bagi orang yang melihat tidak perlu kesulitan dalam menggerakkan kamera untuk melihat objek. Sintaks yang dipergunakan adalah sebagai berikut :

mCamera->setPosition(0,100,400);

  1. Bayangan gambar disini dimaksudkan agar objek terlihat lebih nyata karena sebelumnya telah dimasukan coing program pencahayaan, sintaxnya adalah:

mFrameListener->showDebugOverlay(true);


Listing Program

#include "ExampleApplication.h"

class MoveDemoListener : public ExampleFrameListener

{

public:

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

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

{

}

bool frameStarted(const FrameEvent &evt)

{

mAnimationState = mEntity->getAnimationState("Tendang");

mAnimationState->setLoop(true);

mAnimationState->setEnabled(true);

mAnimationState->addTime(evt.timeSinceLastFrame);

return ExampleFrameListener::frameStarted(evt);

}

protected:

Entity *mEntity;

SceneNode *mNode;

AnimationState *mAnimationState, *mAnimationState2;

};

class MoveDemoApplication : public ExampleApplication

{

protected:

public:

MoveDemoApplication()

{

}

~MoveDemoApplication()

{

}

protected:

Entity *mEntity;

SceneNode *mNode;

void createScene(void)

{

mSceneMgr->setAmbientLight( ColourValue( 1, 1, 1 ) );

mEntity = mSceneMgr->createEntity( "Shinobi","shinobi.mesh" );

mNode = mSceneMgr->getRootSceneNode()->createChildSceneNode( "ShinobiNode",Vector3(90,0,0));

mNode->attachObject( mEntity );

mNode->setScale(14,14,14);

mNode->yaw(Degree(-90));

mCamera->setPosition(0,100,400);

}

void createFrameListener(void)

{

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

mFrameListener->showDebugOverlay(true);

mRoot->addFrameListener(mFrameListener);

}

};

#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32

#define WIN32_LEAN_AND_MEAN

#include "windows.h"

INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT)

#else

int main(int argc, char **argv)

#endif

{

// Create application object

MoveDemoApplication app;

try {

app.go();

} catch(Exception& e){

#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32

MessageBoxA(NULL, e.getFullDescription().c_str(), "An exception has occurred!",

MB_OK | MB_ICONERROR | MB_TASKMODAL);

#else

fprintf(stderr, "An exception has occurred: %s\n",

e.getFullDescription().c_str());

#endif

}

return 0;

}

0 komentar:

Posting Komentar