Tuesday, January 22, 2013

Listing Ogre3d membuat efek shadow

#include "ExampleApplication.h"

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

    ~TutorialApplication()
    {
    }
protected:
    virtual void createCamera(void)
    {
      //membuat kamera
      mCamera = mSceneMgr->createCamera("PlayerCam");
      //posisi dan arah kamera
      mCamera->setPosition(Vector3(0,300,400));
      mCamera->lookAt(Vector3(0,0,0));
      //mengatur jarak kliping terdekat
      mCamera->setNearClipDistance(10);
    }

    virtual void createViewports(void)
    {
      //membuat satu viewport untuk seluruh window
      Viewport* vp = mWindow->addViewport(mCamera);
      //mengatur warna background viewport
      vp->setBackgroundColour(ColourValue(1.0,1.0,1.0));
      //mengatur rasio kamera
      mCamera->setAspectRatio(Real (vp->getActualWidth()) / Real (vp->getActualHeight()));

    }

void createScene(void)
    {
       Entity *ent;
       Entity *ent1;
       Entity *ent2;

       Light *light;

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

      ent = mSceneMgr->createEntity("Ninja", "ninja.mesh");
      ent->setCastShadows(true);
      SceneNode *node = mSceneMgr->getRootSceneNode()->createChildSceneNode ("Ninja", Vector3(70,0,0));
      node->attachObject( ent );
      node->yaw(Degree(-180));
      node->scale(0.5,0.5,0.5);

      ent1 = mSceneMgr->createEntity("Ninja2", "ninja.mesh");
      ent1->setCastShadows(true);
      SceneNode *node1 = mSceneMgr->getRootSceneNode()->createChildSceneNode ("Ninja2", Vector3(-70,0,0));
      node1->attachObject( ent1 );
      node1->yaw(Degree(-180));
      node1->scale(0.5,0.5,0.5);

      ent2 = mSceneMgr->createEntity("Rumah", "tudorhouse.mesh");
      ent2->setCastShadows(true);
      SceneNode *node2 = mSceneMgr->getRootSceneNode()->createChildSceneNode ("Rumah", Vector3(0,280,-500));
      node2->attachObject( ent2 );
      node2->scale(0.5,0.5,0.5);

      Plane plane(Vector3::UNIT_Y, 0);
      //Register plane
          MeshManager::getSingleton().createPlane("ground1",ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, plane,1500,1500,20,20,true,1,5,5,Vector3::UNIT_Z);
      //menciptakan objek tanah
            ent = mSceneMgr->createEntity("GroundEntity1", "ground1");
            mSceneMgr->getRootSceneNode()->createChildSceneNode()->attachObject(ent);
            ent->setMaterialName("Examples/GrassFloor");
            ent->setCastShadows(false);

            light = mSceneMgr->createLight("Light1");
            light->setType(Light::LT_POINT);
                    light->setPosition(Vector3(400, 250, 150));

                    light->setDiffuseColour(1.0, 1.0, 1.0);
                    light->setSpecularColour(1.0, 1.0, 1.0);
              light = mSceneMgr->createLight("Light3");
                    light->setType(Light::LT_DIRECTIONAL);
                    light->setDiffuseColour(ColourValue(0, 0, 0));
                    light->setSpecularColour(ColourValue(0, 1, 0));

                    light->setDirection(Vector3( 0, -1, 1 ));
                    light = mSceneMgr->createLight("Light2");
              light->setType(Light::LT_SPOTLIGHT);
              light->setDiffuseColour(0, 0, 1.0);
              light->setSpecularColour(0, 0, 1.0);


              light->setDirection(-1, -1, 0);
              light->setPosition(Vector3(300, 300, 0));

              light->setSpotlightRange(Degree(35), Degree(50));

          }
      };

      #if OGRE_PLATFORM == PLATFORM_WIN32 || 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
          TutorialApplication app;

          try {
              app.go();
          } catch( Exception& e ) {
      #if OGRE_PLATFORM == PLATFORM_WIN32 || OGRE_PLATFORM == OGRE_PLATFORM_WIN32
              MessageBox( 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;
}

tampilan output :

No comments:

Post a Comment