Senin, 11 April 2011

Membuat animasi dari Ogre

Oke,postingan kali ini,saya akan memberikan listing untuk membuat project dalam ogre.
Mungkin agak pusing,karena saya pun sebenarnya masih "newbie" dalam ogre.
Untuk object,saya menggunakan object fish.mesh yang sudah disediakan (jadi saya tidak mengubah object lg).
Tapi,jika ingin membuat object sendiri dari blender,membuat skeleton,lalu mengconvertnya menjadi mesh,kamu bisa lihat dari sumber yang ini~http://crystalforest.wordpress.com karena dari sumber tersebutlah saya belajar :D.
oke saya mulai ya..

Setiap kita akan membuat project baru,dalam eclipse,kita harus selalu menkofigurasi(dapat dilihat pada post blog yang lalu)~lihat disini atau lihat saja disini
Nah,setelah kita mengkonfigurasinya,pastinya pada lembar kerja eclipse,kita harus memasukkan listing program (dengan bahasa C++).

#include "ExampleApplication.h"
#include < ogretexture.h >
#include < OgreHardwarePixelBuffer.h >
#include < OgreTextureManager.h >
#include < OgreLogManager.h >
#include < sstream >
TexturePtr ptex;
HardwarePixelBufferSharedPtr buffer;
Overlay* overlay;
static const int reactorExtent = 130; // must be 2^N + 2
uint32 clut[1024];
AnimationState *swim;
// Nano fixed point library
#define FROMFLOAT(X) ((int)((X)*((float)(1<<16))))
#define TOFLOAT(X) ((float)((X)/((float)(1<<16))))
#define MULT(X,Y) (((X)*(Y))>>16)
ColourValue HSVtoRGB( float h, float s, float v )
{
int i;
ColourValue rv(0.0f, 0.0f, 0.0f, 1.0f);
float f, p, q, t;
h = fmodf(h, 360.0f);
h /= 60.0f; // sector 0 to 5
i = (int)floor( h );
f = h - i; // factorial part of h
p = v * ( 1.0f - s );
q = v * ( 1.0f - s * f );
t = v * ( 1.0f - s * ( 1.0f - f ) );

switch( i ) {
case 0: rv.r = v; rv.g = t; rv.b = p; break;
case 1: rv.r = q; rv.g = v; rv.b = p; break;
case 2: rv.r = p; rv.g = v; rv.b = t; break;
case 3: rv.r = p; rv.g = q; rv.b = v; break;
case 4: rv.r = t; rv.g = p; rv.b = v; break;
default: rv.r = v; rv.g = p; rv.b = q; break;
}
return rv;
}
class DynTexFrameListener : public ExampleFrameListener
{
private:
static float fDefDim;
static float fDefVel;
float tim;

int *chemical[2];
int *delta[2];
size_t mSize;
int dt,hdiv0,hdiv1; // diffusion parameters
int F,k; // reaction parameters

bool rpressed;
public:
DynTexFrameListener(RenderWindow* win, Camera* cam) : ExampleFrameListener( win, cam )
{
tim = 0;
rpressed = false;
// Create colour lookup
for(unsigned int col=0; col<1024; col++)
{
ColourValue c;
c = HSVtoRGB((1.0f-col/1024.0f)*90.0f+225.0f, 0.9f, 0.75f+0.25f*(1.0f-col/1024.0f));
c.a = 1.0f - col/1024.0f;
PixelUtil::packColour(c, PF_A8R8G8B8, &clut[col]);
}
// Setup
LogManager::getSingleton().logMessage("Creating chemical containment");
mSize = reactorExtent*reactorExtent;
chemical[0] = new int [mSize];
chemical[1] = new int [mSize];
delta[0] = new int [mSize];
delta[1] = new int [mSize];

dt = FROMFLOAT(2.0f);
hdiv0 = FROMFLOAT(2.0E-5f/(2.0f*0.01f*0.01f)); // a / (2.0f*h*h); -- really diffusion rate
hdiv1 = FROMFLOAT(1.0E-5f/(2.0f*0.01f*0.01f)); // a / (2.0f*h*h); -- really diffusion rate
//k = FROMFLOAT(0.056f);
//F = FROMFLOAT(0.020f);
k = FROMFLOAT(0.0619f);
F = FROMFLOAT(0.0316f);

resetReactor();
fireUpReactor();
updateInfoParamF();
updateInfoParamK();
updateInfoParamA0();
updateInfoParamA1();

LogManager::getSingleton().logMessage("Cthulhu dawn");
}
void resetReactor()
{
LogManager::getSingleton().logMessage("Facilitating neutral start up conditions");
for(unsigned int x=0; x<<16)-U);
delta[1][idx] += UVV - MULT(F+k,V);
idx++;
}
idx += 2;
}
// Update concentrations
for(x=0; xlock(HardwareBuffer::HBL_DISCARD);
const PixelBox &pb = buffer->getCurrentLock();
unsigned int idx = reactorExtent+1;
for(unsigned int y=0; y<(reactorExtent-2); y++) {
uint32 *data = static_cast(pb.data) + y*pb.rowPitch;
int *chem = &chemical[0][idx];
for(unsigned int x=0; x<(reactorExtent-2); x++) {
data[x] = clut[(chem[x]>>6)&1023];
}
idx += reactorExtent;
}
buffer->unlock();
}
// GUI updaters
void updateInfoParamK()
{
OverlayManager::getSingleton().getOverlayElement("Example/DynTex/Param_K") \
->setCaption("[1/2]k: "+StringConverter::toString(TOFLOAT(k)));
}
void updateInfoParamF()
{
OverlayManager::getSingleton().getOverlayElement("Example/DynTex/Param_F") \
->setCaption("[3/4]F: "+StringConverter::toString(TOFLOAT(F)));
}
void updateInfoParamA0()
{
// Diffusion rate for chemical 1
OverlayManager::getSingleton().getOverlayElement("Example/DynTex/Param_A0") \
->setCaption("[5/6]Diffusion 1: "+StringConverter::toString(TOFLOAT(hdiv0)));
}
void updateInfoParamA1()
{
// Diffusion rate for chemical 2
OverlayManager::getSingleton().getOverlayElement("Example/DynTex/Param_A1") \
->setCaption("[7/8]Diffusion 2: "+StringConverter::toString(TOFLOAT(hdiv1)));
}

bool frameStarted( const FrameEvent& evt )
{
using namespace OIS;
if( ExampleFrameListener::frameStarted( evt ) == false )
return false;

if( mKeyboard->isKeyDown( KC_1 ) ) {
k -= FROMFLOAT(0.005f*evt.timeSinceLastFrame);
updateInfoParamK();
}
if( mKeyboard->isKeyDown( KC_2 ) ) {
k += FROMFLOAT(0.005f*evt.timeSinceLastFrame);
updateInfoParamK();
}
if( mKeyboard->isKeyDown( KC_3 ) ) {
F -= FROMFLOAT(0.005f*evt.timeSinceLastFrame);
updateInfoParamF();
}
if( mKeyboard->isKeyDown( KC_4 ) ) {
F += FROMFLOAT(0.005f*evt.timeSinceLastFrame);
updateInfoParamF();
}
if( mKeyboard->isKeyDown( KC_5 ) ) {
hdiv0 -= FROMFLOAT(0.005f*evt.timeSinceLastFrame);
updateInfoParamA0();
}
if( mKeyboard->isKeyDown( KC_6 ) ) {
hdiv0 += FROMFLOAT(0.005f*evt.timeSinceLastFrame);
updateInfoParamA0();
}
if( mKeyboard->isKeyDown( KC_7 ) ) {
hdiv1 -= FROMFLOAT(0.005f*evt.timeSinceLastFrame);
updateInfoParamA1();
}
if( mKeyboard->isKeyDown( KC_8 ) ) {
hdiv1 += FROMFLOAT(0.005f*evt.timeSinceLastFrame);
updateInfoParamA1();
}

if( mKeyboard->isKeyDown( KC_0 ) && !rpressed ) {
// Reset 0
resetReactor();
fireUpReactor();
rpressed = true;
} else {
rpressed = false;
}
for(int x=0; x<10; x++)
runStep();
buildTexture();
swim->addTime(evt.timeSinceLastFrame);

return true;
}

virtual ~DynTexFrameListener(void)
{
delete [] chemical[0];
delete [] chemical[1];
delete [] delta[0];
delete [] delta[1];
}
};

float DynTexFrameListener::fDefDim = 25.0f;
float DynTexFrameListener::fDefVel = 50.0f;

class DynTexApplication : public ExampleApplication
{
public:
DynTexApplication() {}

protected:


virtual void createFrameListener(void)
{
mFrameListener= new DynTexFrameListener(mWindow, mCamera);
mFrameListener->showDebugOverlay(true);
mRoot->addFrameListener(mFrameListener);
}


virtual void createViewports(void)
{
// Create one viewport, entire window
Viewport* vp = mWindow->addViewport(mCamera);
vp->setBackgroundColour(ColourValue(0,0,0));

// Alter the camera aspect ratio to match the viewport
mCamera->setAspectRatio(
Real(vp->getActualWidth()) / Real(vp->getActualHeight()));
}

// Just override the mandatory create scene method
void createScene(void)
{
// Create dynamic texture
ptex = TextureManager::getSingleton().createManual(
"DynaTex","General", TEX_TYPE_2D, reactorExtent-2, reactorExtent-2, 0, PF_A8R8G8B8,
TU_DYNAMIC_WRITE_ONLY);
buffer = ptex->getBuffer(0, 0);

// Set ambient light
mSceneMgr->setAmbientLight(ColourValue(0.6, 0.6, 0.6));
mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox", 50 );

//mRoot->getRenderSystem()->clearFrameBuffer(FBT_COLOUR, ColourValue(255,255,255,0));

// Create a light
Light* l = mSceneMgr->createLight("MainLight");
l->setDiffuseColour(0.75, 0.75, 0.80);
l->setSpecularColour(0.9, 0.9, 1);
l->setPosition(-100,80,50);
mSceneMgr->getRootSceneNode()->attachObject(l);


Entity *planeEnt = mSceneMgr->createEntity("TexPlane1", Ogre::SceneManager::PT_PLANE);
// Give the plane a texture
planeEnt->setMaterialName("Examples/DynaTest");

SceneNode* node = mSceneMgr->getRootSceneNode()->createChildSceneNode(Vector3(-100,-40,-100));
node->attachObject(planeEnt);
node->setScale(3.0f, 3.0f, 3.0f);

// Create objects
SceneNode *blaNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(Vector3(-200,0,50));
Entity *ent2 = mSceneMgr->createEntity( "knot", "knot.mesh" );
ent2->setMaterialName("Examples/DynaTest4");
blaNode->attachObject( ent2 );

blaNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(Vector3(200,-90,50));
ent2 = mSceneMgr->createEntity( "knot2", "knot.mesh" );
ent2->setMaterialName("Examples/DynaTest2");
blaNode->attachObject( ent2 );
blaNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(Vector3(-110,200,50));

// Cloaked fish
ent2 = mSceneMgr->createEntity( "knot3", "fish.mesh" );
ent2->setMaterialName("Examples/DynaTest3");
swim = ent2->getAnimationState("swim");
swim->setEnabled(true);
blaNode->attachObject( ent2 );
blaNode->setScale(50.0f, 50.0f, 50.0f);


//TextureManager::getSingleton().getByName("RustySteel.jpg");


std::stringstream d;
d << "HardwarePixelBuffer " << buffer->getWidth() << " " << buffer->getHeight() << " " << buffer->getDepth();
LogManager::getSingleton().logMessage(d.str());

buffer->lock(HardwareBuffer::HBL_NORMAL);
const PixelBox &pb = buffer->getCurrentLock();
d.str("");
d << "PixelBox " << pb.getWidth() << " " << pb.getHeight() << " " << pb.getDepth() << " " << pb.rowPitch << " " << pb.slicePitch << " " << pb.data << " " << PixelUtil::getFormatName(pb.format);
LogManager::getSingleton().logMessage(d.str());
buffer->unlock();

// show GUI
overlay = OverlayManager::getSingleton().getByName("Example/DynTexOverlay");
overlay->show();
}

void destroyScene(void)
{
// Free resource pointers before shutdown
ptex.setNull();
buffer.setNull();
}

};

#ifdef __cplusplus
extern "C" {
#endif

#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
DynTexApplication app;

try {
app.go();
} catch( Ogre::Exception& e ) {
#if OGRE_PLATFORM == OGRE_PLATFORM_WIN32
MessageBox( NULL, e.getFullDescription().c_str(), "An exception has occured!", MB_OK | MB_ICONERROR | MB_TASKMODAL);
#else
std::cerr << "An exception has occured: " <<
e.getFullDescription().c_str() << std::endl;
#endif
}

return 0;
}

#ifdef __cplusplus
}
#endif


Jadi,pada listing diatas,akan menghasilkan output berbentuk texture.
Nah,jika kita memencet angka 7 atau 8 dan 4 atau 5 akan memberikan efek perubahan texture.
Hasilnya menjadi seperti ini:









View full article and comment >>>

LP Pertemuan 7 kelas 1IA12

LP pertemuan 7:
1. Jelaskan apa yang kamu ketahui tentang form!
2. Sebutkan dan jelaskan properties dan event yang dimiliki oleh form (min. 5)!
3. Jelaskan apa perbedaan antara MDI dan SDI form





View full article and comment >>>

Sabtu, 02 April 2011

OGRE game engine



Oke..sekarang saya akan membahas ttg ogre game engine.
Ogre,hmm ogre disini bukan monster rawa hijau yang ada di film SHREK.hehee
Jadi,apa sih ogre itu??
OGRE (Object-Oriented Graphics Rendering Engine) adalah engine yang object oriented & flexible 3D rendering pada game engine yang ditulis dalam bahasa C++ serta didesain untuk mampu men-developer dengan intuitif & mudah kepada aplikasi produksi dengan menggunakan utility hardware-accelerated 3D graphic. Gambaran abstraknya OGRE menggunakan sistem library seperti Direct3D & OpenGL, serta menyediakan sebuah dasar interface di dunia objek dan class object yang lebih tinggi.




Informasi Umum

OGRE hanyalah rendering engine. Seperti pada engine lainnya, hanya saja OGRE pada umumnya hanya sebagai graphic rendering. Dengan kata lain fitur OGRE hanya khusus menangani vector & matrix classes, memory handling, dan lain-lain. Ini bukanlah salah satu dari semua solusi dalam istilah game development / simulasi, OGRE tidak menyediakan audio / physics support.

Pada umumnya ini bisa dikatakan sebagai kelemahan utama dari OGRE, tetapi itu setara setelah melihat kemampuan grafis ada engine ini. Kemempuan utama OGRE adalah graphics engine yang bisa memberikan para developer sebuah kebebasan untuk menggunakan physics apapun, input, audio, & library lainnya. OGRE memberikan para tim development untuk fokus pada graphics daripada beberapa sistem-sistem yang ada dalam game development. OGRE dapat mensuport OIS, SDL, dan CEGUI libraries.

Sekarang ini OGRE adalah publish dibawah dua lisensi, yaitu LGPL & OUL. Maka sekarang ini para publish tersebut membuka OGRE sebagai free / open-source software.

Fitur-fitur dalam ogre

Fitur-Fitur yang terdapat pada OGRE yaitu:
* Desain yang berobject oriented dengan menggunakan plug-in untuk mempermudah memasukkan fitur lainnya.
* Engine berbasis scane graph dengan bantuan untuk sebuah varietas yang luas, octree, BSP, & Paging Landscape scene manager.
* Multi-platform dengan dukungan OpenGL & Direct3D. Bisa merender konten yang sama di beda platform tanpa harus mempunyai content creator. Dapat diakses pada platform Linux, Mac OS X, dan semua versi Windows.
* OGRE mendukung program Vertex dan Fragment selama ditulis dengan GLSH, HLSL, Cg, dan assembler.
* The landscape scene manager untuk Progressive LOD, yang mana bisa dibuat secara otomatis & manual.
* Engine animasi yang mensuport penuh untuk multiple hardware.
* OGRE mempunyai comositing manager dengan bahasa script dan full screen postprocessing untuk efek seperti HDR, blooming, satruation, brightness, blurring, & noise.
* Libraries mempunyai fitur memory debugging & loading resource dari archive-nya.
* Tersedia konten tools untuk 3D modeler, seperti 3D Studio Max, Maya, Blender, LightWare, Milkshape, Sketchup, dsb.

Installasi Ogre dalam Windows
Ogre atau object-oriented Graphics Rendering Engine adalah open source rendering engine grafik yang ditulis dan dimaintain oleh tim inti kecil. Ogre merupakan suatu aplikasi 3D yang bersifat open source. Berikut ini adalah file-file yg dibutuhkan untuk membuat aplikasi 3D dengan library OGRE3D (Object Oriented Graphics Rendering Engine) antara lain :

* Eclipse-CPP ganymede sebagai IDE C++

* MinGW toolbox sebagai GCC opensource compiler

* MYSYS sebagai GNU Terminal environment

* OGRE3D SDK sebagai rendering engine di OGRE SDK for Code::Blocks + MinGW C++ Toolbox , perlu diperhatikan bahwa kita menggunakan MinGW sebagai c++ compilernya


1.Pertama install MinGW Toolbox dan setelah itu lakukan setting environment variable, misalkan anda menginstalnya di D:\mingw, maka dalam environment variable kita set path dengan nilai D:\mingw\bin


2.untuk mengecheck apakah MinGW sudah terinstall dengan benar, ketik gcc –v pada command prompt

3.kemudian install MYSYS, jalankan setup MYSYS-1.0.10, kemudian setting path seperti yang dilakukan untuk menginstall MinGW seperti gambar dibawah berikut


4.untuk mengechecknya ketikan uname –a dicommand prompt

5.selanjutnya install OGRE, kemudian setting variable seperti MinGW dan MYSYS diatas, tetapi kita membuat variabel system baru yang bernama OGRE_HOME


6.Lalu extractlah file eclipse hasil download dan jalankan file eclipse.exe dalam folder eclipse

7.Setelah itu kita buat project baru dengan menekan alt+shift+n lalu pilihlah C++ Project, perhatikan gambar berikut :


8.Lalu selanjutnya kita akan membuat sebuah project aplikasi 3D yang memanfaatkan OGRE.
9.pilih empty project dengan toolchains MinGW

10.lalu klik project pada bagian project explorer lalu tekan alt+enter

11.Arahkan kebagian C/C++ Build --> Settings, Klik Manage Configurations lalu klik baris Release dan tekan Set Active dan klik OK.

12.Masuk ke bagian GCC C++ Compiler pada Tool Settings, selanjutnya ikutilah petunjuk table berikut ini untuk bagian-bagian properties pada pilihan Debug dan Release. Pastikan yang aktif adalah Release.


13.Masih pada bagian Tool Setting, masuk ke bagian MinGW C++ Linker ikutilah petunjuk table berikut ini untuk bagian-bagian properties pada pilihan Debug dan Release. Pastikan yang aktif adalah Release.


14.Masuk kebagian sourcecode, masukkan contoh sourcecode

15.Build project tersebut(dari sourcode yang kamu masukkan), dan masuk kedalam direkori OgreSDK\bin\release lalu buka file resource.cfg

16.Ganti bagian ../../../ dengan fullpath lokasi OgreSDK

17.Savelah file tersebut, lalu copy semua isi direktori OgreSDK\bin\release kedalam workspace project anda khusunya direkori nama_workspace\nama_project\Release

18.Masuk ke direktori nama_workspace\nama_project\Release, jalankan file executablenya biasanya nama_project.exe maka akan muncul dialog seperti ini,
>

19.Disini kita mengkonfigurasi output yang ditampilkan, tekan OK, maka hasilnya akan tampak


Installasi Ogre dalam Ubuntu
Sebenarnya di Ubuntu Repository sudah ada Ogre3D, namun hanya terbatas pada library (pada /usr/lib/OGRE) dan development headernya (pada folder /usr/include/OGRE). Mereka disimpan pada package libogre6 dan libogre-dev. Dan juga, yang berguna, adalah dokumentasi ogre yang disimpan pada package ogre-doc

Tapi, Ubuntu tidak menyertakan Samples yang memudahkan kamu untuk mempelajari, dan terkesan, pada Ogre. Namun, menginstall Ogre dari Source pun tidak mudah. Ada beberapa hal yang perlu dicermati :

1. Ada library yg harus kamu download, yaitu Freeimage, OIS, dan Cg_toolkit. Kamu harus mendownload sourcesnya, dan melakukan kompilasi. Siap-siap ya dengan membaca file2 spt README, INSTALL dan sebagainya. Bagi kamu yang pemula, kamu hanya tinggal menjalankan ./configure, make dan make install. Itu aja kok, mudah. Tapi untuk jelasnya silahkan baca masing-masing petunjuk instalasi. Oh ya, kalau saat instalasi OIS,kamu disuruh menginstall beberapa paket yang dibutuhkan, install saja. Misalnya nanti kamu akan disuruh menginstall Automake dan sebagainya. Bisa kan menginstall mereka dengan sudo apt-get install ? Pastikan dulu nama packagenya dengan mencari dengan apt-search ya.
Download source ogre disini--> source ogre

buat lebih jelas klik disini aja--> cara install


2.Untuk menjalankan Demo ini(yang diatas), kamu harus berada di folder Samples/Common/bin dan menjalankan semua file binary hasil perintah make dari situ. Contoh untuk menjalankan demo Robot ini, perintahnya adalah ../../Robot/src/Robot, tentu dari direktori /Samples/Common/bin.

Langkah utuk instalasi Ogre 3D di Ubuntu Gutsy (setidak2nya Gutsy sudah menyediakan paket libfreeimage, jadi kamu tidak perlu download dari sourcenya).
Paket yang yg belum ada di Gutsy (klik aja untuk download-->) : OIS dan Cg Toolkit.

Instalasi OIS
Install dulu dependency :

sudo apt-get install autoconf automake1.9 libtool libxaw6-dev build-essential

membutuhkan 63.3 MB

Kemudian mulai build

make clean # bersihkan folder objek hasil kompilasi sebelumnya
./bootstrap
./configure --disable-ogre # karena ogre yg akan memanggil ois
make
sudo make install
Instalasi Cg Toolkiet
extract Cg_toolkit, dan kopi ke /usr semuanya :
cd Cg
sudo cp usr/* /usr -R

Instalasi Ogre
Install dulu dependency :
sudo apt-get install libzzip-dev libxxf86vm-dev \
libxrandr-dev libxrandr-dev libfreeimage-dev \
libcegui-mk2-dev libfreetype6-dev libdevil-dev \
libgtk2.0-dev libcppunit-dev libglut3-dev

jalankan terlebih dahulu :
aclocal

Kemudian mulai build :
./bootstrap
./configure
make
sudo make install

sumber:
- sumber1
- sumber2
- sumber3
- sumber4

View full article and comment >>>

LP Pertemuan 6 kelas 1IA12

LP pertemuan 6:
1. Sebutkan dan jelaskan tipe data yang dimiliki oleh Visual basic
2. Sebutkan dan Jelaskan bentuk umum struktur kondisi yang dimiliki oleh VB
3. Sebut dan jelaskan bentuk umum struktur perulangan yang dimiliki oleh VB



View full article and comment >>>

Sabtu, 26 Maret 2011

GAME ENGINE



Game Engine...hmm..postingan kali ini masih berkutat seputar game lagi..

Oke,siap ya...
Game engine,secara harfiah ya dlm arti Indonesia adalah mesin permainan.
Kita sering main game,tapi kita ga tau kan cara pembuatannya dan penggeraknya gimana..
Nah maka dari itu,kita bahas tentang game engine :)

Apa sih game engine itu??
Game engine adalah program yang menjadi penggerak suatu program game. fungsionalitas inti biasanya disediakan oleh mesin permainan mencakup mesin render ( “renderer”) untuk 2D atau 3D grafis, mesin fisika atau tabrakan (dan tanggapan tabrakan), suara, script, animasi, kecerdasan buatan, jaringan, streaming, manajemen memori, threading, dukungan lokalisasi, dan adegan grafik. Proses pengembangan permainan sering dihemat oleh sebagian besar menggunakan kembali mesin permainan yang sama untuk menciptakan permainan yang berbeda.


Kenapa sih kita membutuhkan game engine??
Game engine adalah program yang “memotori” jalannya suatu program game. Kalau game diilustrasikan sebagai musik yang keluar dari mp3 player, maka engine adalah mp3 player dan program utama adalah data mp3 yang dimasukkan ke dalam mp3 player tersebut.

Dengan adanya engine, waktu, tenaga dan biaya yang dibutuhkan untuk membuat game software menjadi berkurang secara signifikan. Beberapa game dengan jenis dan gameplay yang hampir sama bisa dibuat dengan sedikit usaha bila terlebih dahulu dibuat engine-nya. Setelah engine diselesaikan, programmer hanya perlu menambahkan progam utama, memakai resources (objek 3D, musik, efek suara) yang baru dan, jika benar-benar dibutuhkan , sedikit memodifikasi engine sesuai kebutuhan spesifik dari game yang bersangkutan.

Beberapa Tipe Game Engine
Game engine biasanya datang dengan berbagai macam jenis dan ditujukan untuk berbagai kemampuan pemrograman. Ada 3 tipe game engine yang ada saat ini, diantaranya :

1. Roll-your-own game engine
Banyak perusahaan game kecil seperti publisher indie biasanya menggunakan engine-nya sendiri. Mereka menggunakan API seperti XNA, DirectX atau OpenGL untuk membuat game engine mereka sendiri. Di sisi lain, mereka kadang menggunakan library komersil atau yang open source. Terkadang mereka juga membuat semuanya mulai dari nol. Biasanya game engine tipe ini lebih disukai karena selain kemungkinan besar diberikan secara gratis, juga memperbolehkan mereka (para developer) lebih fleksibel dalam mengintegrasikan komponen yang diinginkan untuk dibentuk sebagai game engine mereka sendiri. Kelemahannya banyak engine yang dibuat dengan cara semacam ini malah menyerang balik developernya. Tower Games Studio membutuhkan satu tahun penuh untuk menyempurnakan game engine-nya, hanya untuk ditulis ulang semuanya dalam beberapa hari sebelum penggunaannya karena adanya bug kecil yang sangat mengganggu.

2. Mostly-ready game engines
Engine ini biasanya sudah menyediakan semuanya begitu diberikan pada developer/programer. Semuanya termasuk contoh GUI, physiscs, libraries model, texture dan lain-lain. Banyak dari mereka yang sudah benar-benar matang, sehingga dapat langsung digunakan untuk scripting sejak hari pertama. Game engine semacam ini memiliki beberapa batasan, terutama jika dibandingkan dengan game engine sebelumnya yang benar-benar terbuka lebar. Hal ini ditujukan agar tidak terjadi banyak error yang mungkin terjadi setelah sebuah game yang menggunakan engine ini dirilis dan masih memungkinkan game engine-nya tersebut untuk mengoptimalkan kinerja game-nya. Contoh tipe game engine seperti ini adalah Unreal Engine, Source Engine, id Tech Engine dan sebagainya yang sudah sangat optimal dibandingkan jika harus membuat dari awal. Dengan hal ini dapat menyingkat menghemat waktu dan biaya dari para developer game.

3. Point-and-click engines
Engine ini merupakan engine yang sangat dibatasi, tapi dibuat dengan sangat user friendly. Anda bahkan bisa mulai membuat game sendiri menggunakan engine seperti GameMaker, Torque Game Builder dan Unity3D. Dengan sedikit memanfaatkan coding, kamu sudah bisa merilis game point-and-click yang kamu banget. Kekurangannya terletak pada terbatasnya jenis interaksi yang bisa dilakukan dan biasanya hal ini mencakup semuanya, mulai dari grafis hingga tata suara. Tapi bukan berarti game engine jenis ini tidak berguna, bagi developer cerdas dan memiliki kreativitas tinggi, game engine seperti ini bisa dirubah menjadi sebuah game menyenangkan, seperti Flow. Game engine ini memang ditujukan bagi developer yang ingin menyingkat waktu pemrogramman dan merilis game-game mereka secepatnya.

Contoh Aplikasi Game Engine:
Game engine gratis
1. OGRE
2. Irrlicht
3. Panda3D. Contoh game-nya : Pirates of the Caribbean Online.
4. Crystal Space
5. jME
6. Blender Game Engine
7. Reality Factory
8. The Nebula Device 2
9. RealmForge
10. OpenSceneGraph

Game engine berbayar
1. C4 Engine
2. Torque Game Engine
3. 3DGameStudio
4. TV3D SDK 6.5
5. Leadwerks Engine 2
6. Unity. Contoh game-nya : Tiger Woods PGA Tour Online.
7. DX Studio
8. NeoAxis Engine
9. Visual3D.NET Game Engine
10. Esenthel Engine
Beberapa mesin permainan hanya menyediakan waktu-nyata (real-time), bukan kemampuan render 3D dari beragam fungsi yang diperlukan oleh permainan. Mesin ini mengandalkan permainan pengembang untuk melaksanakan seluruh fungsi ini atau merakit dari komponen middleware permainan lainnya. Mesin jenis ini umumnya disebut sebagai “mesin grafis,” “mesin rendering,” atau “mesin 3D” bukannya yang lebih mencakup istilah “mesin permainan.” Namun, terminologi ini tidak konsisten digunakan sebagai banyak fitur lengkap mesin game 3D disebut hanya sebagai “mesin 3D.” Beberapa contoh dari mesin grafis adalah: RealmForge, Truevision3D, ogre, Crystal Space, Genesis3D, Irrlicht dan JMonkey Engine. Permainan modern atau mesin grafis umumnya memberikan adegan grafik, yang merupakan berorientasi objek representasi dari dunia permainan 3D yang sering menyederhanakan desain permainan dan dapat digunakan untuk rendering lebih efisien dari dunia maya yang luas.


sumber:
http://bocahit.blogspot.com
http://www.creativebrain.web.id
http://febriady.wordpress.com
View full article and comment >>>

LP Pertemuan 5 Kelas 1ia12

LP Pertemuan 5 kelas 1ia12:

Nah sekarang kita ganti materi jadi VB nih.. :)
1. Jelaskan apa yang kamu ketahui tentang Visual Basic!
2. Sebutkan window kerja yang dimiliki oleh Visual Basic!
3. Apa yang kamu ketahui tentang Form?



View full article and comment >>>

Kamis, 24 Maret 2011

MD5..hmm...SHA?? apa ya itu?? CEKIDOT aja byar tau :)

Sebelum kita masuk ke materi yang "mengasyikkan" ini,lebih baik kita harus tau dulu apa itu HASH.
SIAP?? READY..STEADY..GO!!

Hash adalah suatu teknik "klasik" dalam Ilmu Komputer yang banyak digunakan dalam praktek secara mendalam. Hash merupakan suatu metode yang secara langsung mengakses record-record dalam suatu tabel dengan melakukan transformasi aritmatik pada key yang menjadi alamat dalam tabel tersebut. Key merupakan suatu input dari pemakai di mana pada umumnya berupa nilai atau string karakter. Pelacakan dengan menggunakan Hash terdiri dari dua langkah utama, yaitu:
1. Menghitung Fungsi Hash. Fungsi Hash adalah suatu fungsi yang mengubah key menjadi alamat dalam tabel. Fungsi Hash memetakan sebuah key ke suatu alamat dalam tabel. Idealnya, key-key yang berbeda seharusnya dipetakan ke alamat-alamat yang berbeda juga. Pada kenyataannya, tidak ada fungsi Hash yang sempurna. Kemungkinan besar yang terjadi adalah dua atau lebih key yang berbeda dipetakan ke alamat yang sama dalam tabel. Peristiwa ini disebut dengan collision (tabrakan). Karena itulah diperlukan langkah berikutnya, yaitu collision resolution (pemecahan tabrakan).

2. Collision Resolution. Collision resolution merupakan proses untuk menangani kejadian dua atau lebih key di-hash ke alamat yang sama. Cara yang dilakukan jika terjadi collision adalah mencari lokasi yang kosong dalam tabel Hash secara terurut. Cara lainnya adalah dengan menggunakan fungsi Hash yang lain untuk mencari lokasi kosong tersebut.

Oke..selanjutnya..kita masuk ke materi "sesungguhnya".CEKIDOT!! :D

MD5
Fungsi hash yang paling banyak digunakan dalam keamanan jaringan komputer dan internet adalah MD5 yang dirancang oleh Ron Rivest yang juga merupakan salah satu pengembang algoritma RSA pada tahun 1991. MD5 merupakan kelanjutan daru MD4 yang dirancang dengan tujuan keamanan. Secara perhitungan matetamatis tidak dimungkinkan untuk mendapatkan dua pesan yang memiliki hash yang sama. Tidak ada serangan yang lebih efisien untuk membongkar/mengetahui hash suatu pesan selain brute-force.


CARA KERJA MD5
MD5 mengolah blok 512 bit, dibagi kedalam 16 subblok berukuran 32 bit. Keluaran algoritma diset menjadi 4 blok yang masing-masing berukuran 32 bit yang setelah digabungkan akan membentuk nilai hash 128 bit
Pesan diberi tambahan sedemikian sehingga panjang menjadi k-bit, dimana k = 512n – 64 bit. n merupakan blok masukan. Tambahan ini diperlukan hingga pesan menjadi k bit. Kemudian 64 bit yang masing kosong, dibagian akhir, diisi panjang pesan. Inisiasi 4 variabel dengan panjang 32 bit yaitu a,b,c,d. Variabel a,b,c,d dikopikan ke variabel a,b,c,d yang kemudian diolah melalui 4 tahapan yang sangat serupa. Setiap tahapan menggunakan 16 kali operasi berbeda,
menjalankan fungsi nonlinear pada tiga variabel a,b,c, atau d. Hasilnya ditambahkan ke variabel keempat, subblok pesan dan suatu konstanta. Kemudian dirotasi kekiri beberapa bit yang kemudian ditambahkan ke salah satu dari a,b,c, atau d. Kemudian nilai a,b,c, dan d menggantikan nilai a,b,c, dan d. Kemudian dikeluarkan output yang merupakan gabungan daria,b,c, dan d. Fungsi kompresi yang digunakan oleh algoritma md5 adalah sebagai berikut :

a ← b + (( a + g ( b,c,d) + X[k] + T[i] <<<>,dimana g adalah salah fungsi primitif F,G,H,I
seperti dibawah ini :
dan operasi XOR, AND, OR, dan NOT adalah sebagai berikut :

SHA
SHA dikembangkan oleh National Institute of Standards and Technology ( NIST ) dan National Security Agency ( NSA ) sebagai komponen Digital Signature Standart ( DSS ) . Standart hash adalah Secure Hash Standart ( SHS ) dengan SHA sebagai algoritma yang digunakan. SHS menetapkan SHA yang diperlukan untuk menjamin keamanan Digital Signature Algorithm( DSA ). SHA mempunyai empat spesifikasi, yaitu SHA-1, SHA-256, SHA-384 dan SHA-512. perbedaan dari keempat spesifikasi ini diperlihatkan pada tabel 1. Di sini akan dibahas tentang SHA-1 dan SHA-256. SHA - 1 Sebuah versi revisi dari SHA sebagai FIPS 180-1 pada tahun 1995 dan secara umum dikenal sebagai SHA-1.

CARA KERJA SHA - 1
Pesan diberi tambahan untuk membuat panjangnya menjadi kelipatan 512 bit ( l x 512 ) . Jumlah bit asal adalah k bit. Tambahkan bit secukupnya sampai 64 bit kurangnya dari kelipatan 512( 512 – 64 = 448 ), yang disebut juga kongruen dengan 448 ( mod 512 ). Kemudian tambahkan 64 bit yang menyatakan panjang pesan. Inisiasi 5 md variabel dengan panjang 32 bit yaitu a,b,c,d,e. Pesan dibagi menjadi blok-blok berukuran 512 bit dan setiap blok diolah. Kemudian keluaran setiap blok digabungkan dengan keluaran blok berikutnya, sehingga diperoleh output( diggest ). Fungsi kompresi yang digunakan oleh algoritma sha-1 adalah sebagai berikut : A,b,c,d,e ← ( e + f(t,b,c,d) + s5(a) + wt + kt),a,s30(b),c,d.

Apakah SHA itu aman?? Beberapa orang melemparkan sekitar pernyataan seperti "SHA-1 rusak" banyak, jadi aku mencoba untuk memahami apa sebenarnya yang berarti. Mari kita berasumsi aku punya database SHA-1 hash password, dan penyerang whith keadaan seni algoritma SHA-1 melanggar dan botnet dengan 100.000 mesin mendapat akses ke sana. (Kontrol Memiliki lebih dari komputer rumah 100k berarti yang dapat mereka lakukan 10 ^ 15 operasi per detik.) Berapa banyak waktu yang mereka perlu 1. mengetahui password setiap pengguna satu? 2. mengetahui password pengguna tertentu? 3. mengetahui password dari semua user? 4. menemukan cara untuk log in sebagai salah satu pengguna? 5. menemukan cara untuk login sebagai user tertentu? Bagaimana perubahan yang jika password asin? Apakah metode penggaraman (prefix, postfix, baik, atau sesuatu yang lebih rumit seperti xor-ing) penting?

PERBANDINGAN SHA-1 DAN MD5
Karena SHA-1 dan MD5 dikembangkan atau diturunkan dari MD4 maka keduanya mempunyai kemiripina satu sama lain, baik kekuatan dan karakteristiknya.
1. Keamanan terhadap serangan brute-force. Hal yang paling penting adalah bahwa SHA-1 menghasilkan diggest 32-bit lebih panjang dari MD5. Dengan brute-force maka SHA-1 lebih kuat dibanding MD5.
2. Keamanan terhadap kriptanalisis. Kelemahan MD5 ada pada design sehingga lebih mudah dilakukan kriptanalisis dibandingkan SHA-1
3. Kecepatan. Kedua algoritma bekerja pada modulo 232 sehingga keduanya bekerja baik pada arsitektur 32 bit. SHA-1 mempunyai langkah lebih banyak dibandingkan MD5 ( 80 dibanding MD5 64 ) dan harus memproses 160 bit buffer dibanding DM5 128 bit buffer, sehingga SHA-1 bekerja lebih lambat dibanding MD5 pada perangkat keras yang sama.
4. Simplicity. Kedua algoritma simple untuk dijelaskan dan mudah untuk diiemplementasikan karena tidak membutuhkan program yang besar atau tabel subtitusi yang besar pula.

5. Little-endian Versus Big-endian Arsitektur. Md5 menggunakan skema little-endian, sedangkan sha-1 menggunakan skema big-endian. Keduanya tidak memberikan keuntungan yang signifikan untuk sha-1 maupun md5.

sumber:
http://ryanzz12.multiply.com/journal/item/14/Secure_Hash_Algorithm
http://ilmukomputer.org
http://id.webdiscussion.info/question/2772014/Apakah-SHA-1-aman-untuk-penyimpanan-password View full article and comment >>>