ogre学习笔记-基础教程345
来源:互联网 发布:angular 1.0.7.min.js 编辑:程序博客网 时间:2024/06/05 10:02
这三个教程的源码在我的上传资源里面。放到一个解决方案中了。这里假设你能够自己建立一个app,即通过BasicTutorial1的练习。
----------------------
BasicTutorial3
一、地形
1、添加 OgreTerrain_d.lib
2、地形中没有添加 page功能模块
3、TerrainGroup、Terrain和TerrainGlobalOptions类。
3.1、
mTerrainGroup->setFilenameConvention(Ogre::String("BasicTutorial3Terrain"), Ogre::String("dat"));用于设置保存地地形文件的前缀和扩展名。
3.2、
mTerrainGlobals->setLightMapDirection(light->getDerivedDirection()); mTerrainGlobals->setCompositeMapAmbient(mSceneMgr->getAmbientLight()); mTerrainGlobals->setCompositeMapDiffuse(light->getDiffuseColour());用于计算生成纹理中的阴影,所以需要设置方向光的方向和颜色,用于模拟阴影,在渲染的时候不用计算了。
3.3、每层地层贴图需要两层纹理。
3.4、
mTerrainGroup->saveAllTerrains(true);保存所有的地形文件。前缀和扩展名如上设置。
1、天空盒,是一个cube。各种参数见API。
mSceneMgr->setSkyBox(true, "Examples/SpaceSkyBox");2、天空盒还是一个cube,但是他的纹理给人一种圆柱的感觉。
mSceneMgr->setSkyDome(true, "Examples/CloudySky", 5, 8);
3、天空是一个巨大的平面。
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
1、FrameListeners
virtual bool frameStarted(const FrameEvent& evt);virtual bool frameRenderingQueued(const FrameEvent& evt);virtual bool frameEnded(const FrameEvent& evt);
the render windows have been asked to flip their buffers overframeEndedCalled 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).
Note that in the frameStarted method, FrameEvent::timeSinceLastFrame will contain how long it has been since the last frameStarted event was last fired (not the last time a frameEnded method was fired).
frameRenderingQueued函数:使用GPU进行计算。
bool currMouse = mMouse->getMouseState().buttonDown(OIS::MB_Left);if (mKeyboard->isKeyDown(OIS::KC_J)) // Left - yaw or strafe
if(mKeyboard->isKeyDown( OIS::KC_LSHIFT ))
完成。
BasicTutorial5
简介:
The program controls will be the same as in the last tutorial.
We will override the frameRenderingQueued and createFrameListener methods, as well as the MouseListener and KeyboardListener event methods (keyPressed(), keyReleased(), mouseMoved(), mousePressed() and mouseReleased).
利用 public OIS::KeyListener, public OIS::MouseListener 监听接口。
添加监听:在virtual void createFrameListener(void);函数中添加如下代码:
// 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 );
注意:
在virtual bool frameRenderingQueued(const Ogre::FrameEvent& evt );函数中添加代码:
mKeyboard->capture();
mMouse->capture();
代码用于更新鼠标键盘状态。
具体实现函数类似:
bool keyPressed(const OIS::KeyEvent& evt){ switch (evt.key) { case OIS::KC_ESCAPE: mShutDown = true; break; default: break; } return true;}
具体实现3D中的动作,在virtual bool frameRenderingQueued(const Ogre::FrameEvent& evt );函数中添加代码:
mCamNode->translate(mDirection * evt.timeSinceLastFrame, Ogre::Node::TS_LOCAL);
0 0
- ogre学习笔记-基础教程345
- Ogre笔记九:基础教程六—CEGUI和Ogre
- OGRE学习系列二:基础教程介绍
- OGRE学习笔记
- OGRE学习笔记
- OGRE学习笔记
- OGRE学习笔记
- Ogre PCZSceneManger学习笔记
- OGRE学习笔记
- Ogre 学习笔记之 OGRE轨迹动画
- OGRE学习笔记之 配置文件 Ogre.cfg
- linux基础教程学习笔记
- 【SQL 基础教程】学习笔记
- python基础教程学习笔记
- php学习笔记--基础教程
- 《Ruby基础教程》学习笔记
- python基础教程学习笔记
- redis基础教程学习笔记
- 国内哪家免费自助建站系统好用
- Dynpro F4的实现测试
- fedora16 python2.6 升级至python2.7.9
- Android大图片裁剪终极解决方案(下:拍照截图)
- 影子侠开发者-数据库加密SDK详细说明文档
- ogre学习笔记-基础教程345
- iOS开发ARC内存管理技术要点
- ADO.Net之手机号码归属地查询
- Ubuntu 12.04(32位)安装Oracle 11g(32位)全过程以及几乎所有问题的解决办法
- js中通过Object.prototype.toString方法----精确判断对象的类型
- 收到从svn上荡下来有冲突的项目的处理方法
- POJ 1328 Radar Installation
- webservice(java自带的demo)
- 【数据结构】顺序栈