About Me

Foto saya
Depok, Jawa Barat, Indonesia
Saya Rudy, saya sedang study di Gunadarma Depok jurusan Teknik Informatika. Saya belum ahli dalam bidang IT, namun saya berusaha agar dapat menerapkan ilmu yang saya punya dan dapat bermanfaat bagi orang lain.

Popular Posts

Minggu, 13 Mei 2012

Program Ogre animasi sederhana


Hallo sobat blogger,
Kali ini saya akan meng share mengenai program membuat animasi sederhana pada Ogre 3d. Program ini cuman animasi sederhana. Anda cukup mengganti objek .mesh nya saja yang sudah saya tandai dengan warna biru. Selamat mencoba.

#include "ExampleApplication.h"

//--awalan untuk animasi pindah tempat----
#include <deque>
using namespace std;
//-----------------------------------------

class MoveDemoListener : public ExampleFrameListener
{
public:
MoveDemoListener(RenderWindow* win, Camera* cam, SceneNode *sn, deque<Vector3> &walk)
: ExampleFrameListener(win, cam, false, false), mNode(sn), mWalkList(walk)
{

//---tempat pemberian nilai awal untuk variabel-variabel yg digunakan
mWalkSpeed = 8000.0f;
mDirection = Vector3::ZERO;
//-----------------------------------------------------------------------

}

//--Fungsi ini dipanggil untuk memulai perpindahan objek ke posisi selanjutnya dalam mWalkList.
bool nextLocation()
{
if (mWalkList.empty()) return true;

mDestination = mWalkList.front(); // ini untuk mendapatkan posisi depan deque
mWalkList.pop_front(); // ini untuk menghapus posisi depan deque

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

Vector3 src = mNode->getOrientation() * Vector3::UNIT_Z;
if ((1.0f + src.dotProduct(mDirection)) < 0.0001f)
{
mNode->yaw(Degree(180));

}
else
{
Ogre::Quaternion quat = src.getRotationTo(mDirection);
mNode->rotate(quat);
mWalkSpeed = 10000.0f;

}
return true;
}


bool frameStarted(const FrameEvent &evt)


{mNode->yaw(Radian(evt.timeSinceLastFrame));
if (mDirection == Vector3::ZERO)
{
//--gerakan animasi awal atau masih ada titik lokasi yang belum dikunjungi
if (nextLocation())
{
mWalkSpeed = 1000.0f;
mCamera->setPosition(Vector3(-4000,1500,2500));
mCamera->lookAt(Vector3(300,1000,1000));
}
}
else
{
Real move = mWalkSpeed * evt.timeSinceLastFrame;
mDistance -= move;

if (mDistance <= 0.0f)
{
mNode->setPosition(mDestination);
mDirection = Vector3::ZERO;

//--jika sudah tidak ada lagi titik lokasi yang belum dikunjungi
if (! nextLocation())
{
}
}

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

return ExampleFrameListener::frameStarted(evt);
}
protected:

Real mDistance; // Jarak objek yang tersisa untuk berjalan
Vector3 mDirection; // Arah objek saat bergerak
Vector3 mDestination; // Tujuan objek saat bergerak ke depan



SceneNode *mNode;

std::deque<Vector3> mWalkList; // daftar dari titik yang akan kita kunjungi
Real mWalkSpeed; // kecepatan objek bergerak

};


class Red_monster: public ExampleApplication
{
protected:
public:
Red_monster()
{
}

~Red_monster()
{
}
protected:
Entity *mEntity;


SceneNode *mNode;
SceneNode *mNode2;

SceneNode *nodePar;
SceneNode *nodePar2;

ParticleSystem *ps;
ParticleSystem *ps2;

std::deque<Vector3> mWalkList;

void chooseSceneManager(void)
{
mSceneMgr=mRoot->createSceneManager(ST_EXTERIOR_CLOSE);
}

virtual void createViewports(void)
{
Viewport*vp = mWindow->addViewport(mCamera);
vp->setBackgroundColour(ColourValue(0,0,0));
mCamera->setAspectRatio(Real(vp->getActualWidth())/Real(vp->getActualHeight()));
}

void createScene(void)
{
mSceneMgr->setAmbientLight(ColourValue(0, 0,0 ) );
mSceneMgr->setShadowTechnique(SHADOWTYPE_STENCIL_ADDITIVE);


mNode = mSceneMgr->getRootSceneNode()->
createChildSceneNode("RZRNode", Vector3(5000,2000,-2000));


//entitas kedua
mEntity = mSceneMgr->createEntity("RZR-002b", "penguin_peng_body.mesh");
mNode2 = mNode->createChildSceneNode();
mNode2->attachObject(mEntity);
mEntity->setCastShadows(true);
mNode2->setScale(320,250,320);
mNode2->translate(-10,40,-20);

//partikel asap
ps = mSceneMgr->createParticleSystem("particle","Examples/JetEngine2");
nodePar = mNode->createChildSceneNode();
nodePar->attachObject(ps);
nodePar->translate(250,-60,-85);
nodePar->yaw(Degree(90));

ps2 = mSceneMgr->createParticleSystem("particle2","Examples/JetEngine2");
nodePar2 = mNode->createChildSceneNode();
nodePar2->attachObject(ps2);
nodePar2->translate(-250,-60,-85);
nodePar2->yaw(Degree(90));

//daftar jalan
mWalkList.push_back(Vector3(-500.0f, 700.0f, 500.0f));
mWalkList.push_back(Vector3(-1300.0f, 1200.0f, 5000.0f));
mWalkList.push_back(Vector3(-1300.0f, 700.0f, 500.0f));
mWalkList.push_back(Vector3(-500.0f, 700.0f, 500.0f));


Plane monster;
monster.normal = Vector3::UNIT_Y;
monster.d = 0;
MeshManager::getSingleton().createPlane("Mymonster",ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, monster,
14500,14500,10,10,true,1,50,50,Vector3::UNIT_Z);
Entity* pPlaneEnt = mSceneMgr->createEntity( "plane", "Mymonster" );
pPlaneEnt->setMaterialName("Examples/EveningSkyBox");
pPlaneEnt->setCastShadows(true);
mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(pPlaneEnt);

//cahaya
Light *light;
light = mSceneMgr->createLight("Light1");
light->setType(Light::LT_POINT);
light->setPosition(Vector3(0,1000,1000));
//set warna
light->setDiffuseColour(1.0,1.0,1.0);
light->setSpecularColour(1.0,1.0,1.0);

Light *light2;
light2 = mSceneMgr->createLight("Light2");
light2->setType(Light::LT_POINT);
light2->setPosition(Vector3(1100,900,0));
//set warna
light2->setDiffuseColour(1.0,1.0,1.0);
light2->setSpecularColour(1.0,1.0,1.0);

//CloudySky
mSceneMgr->setSkyDome(true,"Examples/SpaceSkyBox",5,8);
}

void createFrameListener(void)
{
mFrameListener= new MoveDemoListener(mWindow, mCamera, mNode, mWalkList);
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
{
// membuat objek aplikasi
Red_monster 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 comments:

Posting Komentar