Upload presentasi
Presentasi sedang didownload. Silahkan tunggu
Diterbitkan olehMichael Ammar Telah diubah "10 tahun yang lalu
1
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 http://www.ogre3d.org/wiki/index.php/Ogre_Tutorials
2
Pendahuluan Di pelajaran ini, pada dasarnya Ogre tidak membuat algoritma untuk animasi dengan sendirinya. Animasi dibuat dari 3D modelling tools yang lain seperti 3ds max, blender dlsb. Yang dilakukan hanya mentranslasi dan merotasikan entitas yang memiliki animasi.
3
Persiapan Animasi 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 ditempuh Vector3 mDirection, mDestination; // vektor arah dan lokasi tujuan AnimationState *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
4
class MoveDemoApplication : public ExampleApplication { protected: public: MoveDemoApplication() { } ~MoveDemoApplication() { } protected: Entity *mEntity; // entitas dari objek yang akan dianimasikan SceneNode *mNode; // SceneNode dari object yang bergerak std::deque mWalkList; // deque yang berisi titik pergerakan void createScene(void) { } void createFrameListener(void) { mFrameListener= new MoveDemoListener(mWindow, mCamera, mNode, mEntity, mWalkList); mFrameListener->showDebugOverlay(true); mRoot->addFrameListener(mFrameListener); } }; Persiapan Animasi
5
Skenario Kita letakkan objek yang akan bergerak. Kita letakkan objek lain sebagai acuan agar terlihat bahwa objek telah bergerak. Kita set list point pergerakan objek. Kita amati dengan kamera berada di lokasi ideal.
6
Meletakkan Objek Tambahkan kode berikut pada MoveDemoApplication::createScene() // Set the default lighting. mSceneMgr->setAmbientLight(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", Vector3(0.0f, 0.0f, 25.0f)); mNode->attachObject(mEntity); Buat pencahayaan environtment menjadi terang
7
Menambahkan list pergerakan 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
Menambahkan Objek lain (acuan) 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);
9
Meletakkan Kamera Tambahkan kode berikut pada TutorialApplication:: createCamera() // Set the camera to look at our handiwork mCamera->setPosition(90.0f, 280.0f, 535.0f); mCamera->pitch(Degree(-30.0f)); mCamera->yaw(Degree(-15.0f));
10
Animasi Tambahkan kode berikut pada kontructor MoveDemoListener // Set idle animation mAnimationState = ent->getAnimationState("Idle"); mAnimationState->setLoop(true); mAnimationState->setEnabled(true); Kompile dan jalankan aplikasi. // perlu kita update animationstate dengan evt.timeSinceLastFrame // pada MoveDemoListener::frameStarted mAnimationState->addTime(evt.timeSinceLastFrame);
11
Menggerakkan Robot Kita ganti konstruktor pada MoveDemoListener dengan // Set default values for variables mWalkSpeed = 35.0f;// kecepatan pergerakan mDirection = Vector3::ZERO;// untuk status tidak bergerak ke manapun. Sedang pada MoveDemoListener ::frameStarted kita tambahkan dengan kode berikut (sebelum AnimationState::addTime ) : if (mDirection == Vector3::ZERO) { if (nextLocation()) { // Set walking animation mAnimationState = mEntity->getAnimationState("Walk"); mAnimationState->setLoop(true); mAnimationState->setEnabled(true); }
12
Mengimplementasikan nextLocation() nextLocation berfungsi untuk mengecek apakah objek masih memiliki point untuk tujuan pergerakan atau tidak. Tambahkan kode berikut pada nextLocation() if (mWalkList.empty()) return false; mDestination = mWalkList.front(); // mengambil nilai terdepan deque mWalkList.pop_front(); // membuang front dari deque mDirection = mDestination - mNode->getPosition(); mDistance = mDirection.normalise(); // mengubah arah wajah robot Vector3 src = mNode->getOrientation() * Vector3::UNIT_X; Ogre::Quaternion quat = src.getRotationTo(mDirection); mNode->rotate(quat);
13
Kembali ke menggerakkan Robot Robot yang ada belum berjalan, meski animasi sudah berubah. Untuk membuat robot berjalan, kita tambahkan kode berikut pada MoveDemoListener::frameStarted(); else { Real move = mWalkSpeed * evt.timeSinceLastFrame; mDistance -= move; if (mDistance <= 0.0f) { mNode->setPosition(mDestination); mDirection = 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->setLoop(true); mAnimationState->setEnabled(true); }
14
Kembali ke menggerakkan Robot Lanjutan else { // Rotation Code will go here later } else { mNode->translate(mDirection * move); } // else } // if if (mWalkList.empty()) return false;
15
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 http://www.ogre3d.org/wiki/index.php/Ogre_Tutorials
16
Blender dan Ogre Objek yang dibuat di blender dapat diload ke Ogre. Format pada ogre *.mesh, blender *.blend Butuh konversi (meshes exporter) http://www.ogre3d.org/wiki/index.php/Blender_Export er http://www.ogre3d.org/wiki/index.php/Blender_Export er Download dan integrasikan Blender Exporter. Copy ogremeshesexporter.py dan subfolders ke lokasi...\blender\.blender\scripts. Install Python 2.5.4 (atau lebih tinggi) yang dibutuhkan oleh exporter.
17
Blender Meshes Exporter
18
Melihat hasil konversi Aplikasi ceguimeshviewer Informasi lebih lanjut pada link : http://www.ogre3d.org/forums/viewtopic.php?p=136714 Mengintegrasikan langsung ke kode Ogre dengan kode.
Presentasi serupa
© 2024 SlidePlayer.info Inc.
All rights reserved.