mTerrainGroup->setFilenameConvention(Ogre::String("BasicTutorial3Terrain"), Ogre::String("dat"));用于设置保存地地形文件的前缀和扩展名。
mTerrainGlobals->setLightMapDirection(light->getDerivedDirection()); mTerrainGlobals->setCompositeMapAmbient(mSceneMgr->getAmbientLight()); mTerrainGlobals->setCompositeMapDiffuse(light->getDiffuseColour());用于计算生成纹理中的阴影,所以需要设置方向光的方向和颜色,用于模拟阴影,在渲染的时候不用计算了。
mTerrainGroup->saveAllTerrains(true);保存所有的地形文件。前缀和扩展名如上设置。
mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox");2、天空盒还是一个cube,但是他的纹理给人一种圆柱的感觉。
mSceneMgr->setSkyDome(true, "Examples/CloudySky", 5, 8);
Ogre::Plane plane; plane.d = 1000; plane.normal = Ogre::Vector3::NEGATIVE_UNIT_Y;
mSceneMgr->setSkyPlane(true, plane, "Examples/SpaceSkyPlane", 1500, 75);
1、烟雾的生成不是在空的空间里面生成烟雾实体,而是对你当前看到的所有东西进行一个滤镜。
如果你凝视着雾,你讲什么都看不到,只能看到视口的背景。所以我们把背景颜色设置成雾的颜色。
2、有两种基本类型的雾:线性的和指数型的。线性雾浓度成线性变化,指数型的雾成指数变化。
Ogre::ColourValue fadeColour(0.9, 0.9, 0.9); mWindow->getViewport(0)->setBackgroundColour(fadeColour);3、三种雾的设置函数
mSceneMgr->setFog(Ogre::FOG_LINEAR, fadeColour, 0.0, 50, 500);
mSceneMgr->setFog(Ogre::FOG_EXP, fadeColour, 0.005);
mSceneMgr->setFog(Ogre::FOG_EXP2, fadeColour, 0.003);四、烟雾和天空
设置烟雾的时候要注意配合天空盒的设置,否则会出现可以看到奇特的天空的现象。
BasicTutorial4
virtual bool frameStarted(const FrameEvent& evt); virtual bool frameRenderingQueued(const FrameEvent& evt); virtual bool frameEnded(const FrameEvent& evt);
frameStarted | Called just before a frame is rendered. |
frameRenderingQueued | Called after all render targets have had their rendering commands issued, but before the render windows have been asked to flip their buffers over |
frameEnded | Called just after a frame has been rendered. |
timeSinceLastFrame :This variable keeps track of how long it's been since the frameStarted or frameEnded last fired (in seconds).
bool currMouse = mMouse->getMouseState().buttonDown(OIS::MB_Left);if (mKeyboard->isKeyDown(OIS::KC_J)) // Left - yaw or strafe
if(mKeyboard->isKeyDown( OIS::KC_LSHIFT ))
// Do not add this code to the project! mMouse->setEventCallback(this); mKeyboard->setEventCallback(this);
virtual bool keyPressed( const OIS::KeyEvent& evt );
virtual bool keyReleased( const OIS::KeyEvent& evt );
// OIS::MouseListener
virtual bool mouseMoved( const OIS::MouseEvent& evt );
virtual bool mousePressed( const OIS::MouseEvent& evt, OIS::MouseButtonID id );
virtual bool mouseReleased( const OIS::MouseEvent& evt, OIS::MouseButtonID id );
bool keyPressed(const OIS::KeyEvent& evt) { switch (evt.key) { case OIS::KC_ESCAPE: mShutDown = true; break; default: break; } return true; }
mCamNode->translate(mDirection * evt.timeSinceLastFrame, Ogre::Node::TS_LOCAL);