Kita akan membahas cara pewarnaan dan shadowing pada Ogre, pewarnaan pada ogre adalah hasil dari perpaduan warna RGB (red green blue) dengan parameter menggunakan float yaitu berkisar antara 0.0 sampai 1.0. dengan sintaks awalnya adalah ColourValue(float red,float green, float blue) .
Contoh constanta warna built-in yang terdapat pada OGRE, diantaranya :
Ø
static
const Black = ColourValue(0.0,0.0,0.0)
Ø
static
const White=ColourValue(1.0,1.0,1.0)
Ø
static
const Red = ColourValue(1.0,0.0,0.0)
Ø
static
const Green = ColourValue(0.0,1.0,0.0)
Ø
static
const Blue = ColourValue(0.0,0.0,1.0)
Pada Ogre, shadowing digunakan
untuk memberi bayangan pada object yang dihasilkan. Sehingga karakter yang kita
buat dapat memiliki bayangan, dan arah bayangan di tentukan dengan
sintaks-sintaks.
Listing program :
/*
* belajarOgre.cpp
*
*
Created on: Mar 13, 2011
*
Author: Diva
*/
#include
"ExampleApplication.h"
class
BelajarOgre
: public
ExampleApplication
{
public:
BelajarOgre(){
}
~BelajarOgre(){
}
protected:
virtual
void
createCamera(void)
{
mCamera
= mSceneMgr->createCamera("PlayerCam");
mCamera->setPosition(Vector3(500,250,50));
mCamera->lookAt(Vector3(0,0,80));
mCamera->setNearClipDistance(5);
}
virtual
void
createViewports(void)
{
Viewport*
vp = mWindow->addViewport(mCamera);
vp->setBackgroundColour(ColourValue(1,1,1));
mCamera->setAspectRatio(Real(vp->getActualWidth())
/
Real(vp->getActualHeight()));
}
void
createScene(void){
//Light *light;
//mSceneMgr utk manage
semua semua yg tampil pd screen
mSceneMgr->setAmbientLight(ColourValue(1,1,1));
mSceneMgr->setShadowTechnique(
SHADOWTYPE_STENCIL_ADDITIVE
);
//Entity ad objek yg
bs dirender discene
Entity
*ent1 = mSceneMgr->createEntity("Robot","robot.mesh");
Entity
*ent2 = mSceneMgr->createEntity("Robot2","robot.mesh");
ent2->setCastShadows(true);
SceneNode
*node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode("RobotNode");
SceneNode
*node2 = mSceneMgr->getRootSceneNode()->createChildSceneNode("Robot2Node");
//attach
entity ke scenenode ut beri lokasi render
robot
node1->attachObject(ent1);
node2->attachObject(ent2);
node2->translate(100,0,0);
}
};
#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
{
//bikin objek aplikasi
BelajarOgre
app;
try
{
app.go();
} catch
(Exception
e) {
#if
OGRE_PLATFORM == OGRE_PLATFORM_WIN32
MessageBox(NULL,e.what(),"Terjadi
Error!",MB_OK | MB_ICONERROR |MB_TASKMODAL);
#else
fprintf(stderr,"Terjadi Error = %s\n",e.what());
#endif
}
return
0;
}
Keterangan
Program :
mCamera = mSceneMgr->createCamera("PlayerCam");
mCamera->setPosition(Vector3(500,250,50));
mCamera->lookAt(Vector3(0,0,80));
mCamera->setNearClipDistance(5);
Perintah membuat kamera dengan nama
PlayerCam, kemudian perintah menset posisi kamera, selanjutnya perintah menset
arah pandang kamera. Lalu perintah menentukan jarak terdekat yang terlihat
kamera. Untuk menset jarak terjauh menggunakan
setFarClipDistance
vp->setBackgroundColour(ColourValue(1,1,1));
Perintah untuk pewarnaan, yaitu pewarnaan
background, dengan nilai float R,G,B nya adalah 1, sehingga menghasilkan warna
putih
mSceneMgr->setShadowTechnique(
SHADOWTYPE_STENCIL_ADDITIVE
);
Perintah untuk shadowing.
Entity
*ent1 = mSceneMgr->createEntity("Robot","robot.mesh");
Perintah untuk menciptakan entity / object.
node2->translate(100,0,0);
Perintah untuk translasi atau pergeseran.