Skip to main content

History: IntermediateTutorial7Source

Preview of version: 3

This is the source for Intermediate Tutorial 7.

Copy to clipboard
#include "ExampleApplication.h" class RTTListener : public ExampleFrameListener { public: RTTListener(RenderWindow *win, Camera *cam, SceneNode *sn) : ExampleFrameListener(win, cam), mPlaneNode(sn) { } bool frameStarted(const FrameEvent& evt) { mPlaneNode->yaw(Radian(evt.timeSinceLastFrame)); return ExampleFrameListener::frameStarted(evt); } protected: SceneNode *mPlaneNode; }; class RTTApplication : public ExampleApplication, public RenderTargetListener { protected: SceneNode *mPlaneNode; Rectangle2D *mMiniScreen; void createScene() { // Set ambient light mSceneMgr->setAmbientLight(ColourValue(0.2f, 0.2f, 0.2f)); // Create a light Light* l = mSceneMgr->createLight("MainLight"); l->setPosition(20, 80, 50); // Position the camera mCamera->setPosition(60, 200, 70); mCamera->lookAt(0, 0, 0); // Create a material for the plane (just a simple texture, here grass.jpg) MaterialPtr mat = MaterialManager::getSingleton().create("PlaneMat", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); TextureUnitState* t = mat->getTechnique(0)->getPass(0)->createTextureUnitState("grass.jpg"); // Create a simple plane MovablePlane *plane = new MovablePlane("Plane"); plane->d = 0; plane->normal = Vector3::UNIT_Y; MeshManager::getSingleton().createPlane("PlaneMesh", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, *plane, 120, 120, 1, 1, true, 1, 1, 1, Vector3::UNIT_Z); Entity *planeEnt = mSceneMgr->createEntity("PlaneEntity", "PlaneMesh"); planeEnt->setMaterialName("PlaneMat"); // Attach the plane to a scene node mPlaneNode = mSceneMgr->getRootSceneNode()->createChildSceneNode(); mPlaneNode->attachObject(planeEnt); // Create the textures TexturePtr texture = Ogre::TextureManager::getSingleton().createManual("RttTex", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME, TEX_TYPE_2D, mWindow->getWidth(), mWindow->getHeight(), 0, PF_R8G8B8, TU_RENDERTARGET); RenderTexture *renderTexture = texture->getBuffer()->getRenderTarget(); renderTexture->addViewport(mCamera); renderTexture->getViewport(0)->setClearEveryFrame(true); renderTexture->getViewport(0)->setBackgroundColour(ColourValue::Black); renderTexture->getViewport(0)->setOverlaysEnabled(false); renderTexture->addListener(this); // Create the mini screen rectangle and attach it to a scene node mMiniScreen = new Ogre::Rectangle2D(true); mMiniScreen->setCorners(0.5, -0.5, 1.0, -1.0); mMiniScreen->setBoundingBox(AxisAlignedBox(-100000.0*Vector3::UNIT_SCALE, 100000.0*Vector3::UNIT_SCALE)); Ogre::SceneNode *miniScreenNode = mSceneMgr->getRootSceneNode()->createChildSceneNode("MiniScreenNode"); miniScreenNode->attachObject(mMiniScreen); // Create the material for the mini screen MaterialPtr material = MaterialManager::getSingleton().create("RttMat", ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME); Ogre::Technique *technique = material->createTechnique(); technique->createPass(); material->getTechnique(0)->getPass(0)->setLightingEnabled(false); material->getTechnique(0)->getPass(0)->createTextureUnitState("RttTex"); // Apply the material to the mini screen mMiniScreen->setMaterial("RttMat"); } // Create a new frame listener void createFrameListener() { mFrameListener = new RTTListener(mWindow, mCamera, mPlaneNode); mRoot->addFrameListener(mFrameListener); } void preRenderTargetUpdate(const RenderTargetEvent &evt) { mMiniScreen->setVisible(false); } void postRenderTargetUpdate(const RenderTargetEvent &evt) { mMiniScreen->setVisible(true); } }; #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 #define WIN32_LEAN_AND_MEAN #include "windows.h" #endif #ifdef __cplusplus extern "C" { #endif #if OGRE_PLATFORM == OGRE_PLATFORM_WIN32 INT WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR strCmdLine, INT) #else int main(int argc, char **argv) #endif { // Create application object RTTApplication 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 std::cerr << "An exception has occurred: " << e.getFullDescription(); #endif } return 0; } #ifdef __cplusplus } #endif

History

Information Version
Tue 18 of Mar, 2014 15:03 GMT-0000 Enhex Doing it right using BOX_INFINITE. 7
Tue 18 of Mar, 2014 14:46 GMT-0000 Enhex Removing the ogre logo 6
Fri 28 of Sep, 2012 12:16 GMT-0000 eLeMenCy Amended the grass texture name from "grass.jpg" to "grass_1024.jpg" 5
Sun 04 of Dec, 2011 20:22 GMT-0000 spacegaier updated code 4
Mon 04 of Jan, 2010 05:30 GMT-0000 jacmoe 3
Tue 08 of Dec, 2009 16:43 GMT-0000 jacmoe [approved by jacmoe] 2
Wed 15 of Oct, 2008 19:03 GMT-0000 OgreWikiBot Robot: Cosmetic changes 1