13 Ogre 3D Animation
-
Upload
suci-wulandari -
Category
Documents
-
view
265 -
download
0
Transcript of 13 Ogre 3D Animation
-
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.