Minggu, 03 Juni 2012

MEMBUAT PEWARNAAN DAN SHADOWING PADA OGRE




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.






 






















0 komentar:

Posting Komentar