ogre小知识点笔记

什么是FBO (Frame Buffer Object) .
分类: 三维技术 2012-05-30 14:22 0人阅读 评论(0) 收藏 编辑 删除
什么是FBO (Frame Buffer Object)

  帧缓冲是显卡内存中的一块,保存在该内存区块中的图像数据会实时地在显示器上显示出来,帧缓存中的数据最大最小值会被限定在一个范围内,也就是 [0/255; 255/255]
  有一个叫 EXT_framebuffer_object 的OpenGL的扩展, 允许我们把一个离屏缓冲区作为我们渲染运算的目标。我们通常把这一技术叫FBO,也就是 Frame Buffer Object的缩写。

Viewport
简介:
一个Viewport 是 一个Camera 和一个 rendering surface的集会。
Camera渲染从Viewport看到的一个场景,将渲染的结果放在rendering target 的子集里面。
可以渲染整个surface ,也可以只渲染一部分。
每个Viewport有一个单一的Camera作为源,还有一个单一的Target作为目标。
一个相机只有一个Viewport(视口),但是一个RenderTarget 可能有几个Viewport。
一个Viewport有一个Z-order。如果一个RenderTarget有一个以上的Viewport,且它们互相重叠,那么它们通过一些预先决定的方式互相覆盖。

Camera 简介:
OGRE将一个场景从相机的Viewport渲染到一些类的buffer中,例如窗口、纹理(Texture)、
OGRE的相机支持透视图投影(perspective projection )和正交视图投影(orthographic projection )。
每个相机携带一些渲染模式,在需要的时候,你可以用这些信息,创建一些复杂的渲染窗口。
另外,一个RenderTarget可以接收多个Camera,每个渲染一个目标的子集,可以把屏幕分割成多个小块。
Camera维护自己的朝向、比率、视野、平截头体和投影坐标系。
Camera可以用SceneNode::attachObject()函数和SceneNode绑定。 这样,SceneNode就可以控制Camera的位置和朝向,是Camera的控制更加简单。

RenderTarget 简介:
提供一块画布用于显示渲染操作的结果。
这个抽象类为所有渲染操作的目标提供了一个共同的根定义。
一个 RenderTarget 可以是一个屏幕窗口,或者一个非屏幕表面,例如纹理(Texture)、bump map。


ITutorial 5 Static Geometry
一、简介:
当一下物体不经常改变时,使用StaticGeometry类在场景中显示它。
例如,地层、岩石、树木等,都不经常变动,可以使用StaticGeometry类显示。
这里介绍StaticGeometry类的使用,和它使用时涵盖了一些ManualObject类的功能。
在OGRE Sample里面还有关于大片草地的DEMO,可以学习。

二、创建草地Mesh
草地通过3个正方形交叉来创建。每个正方形之间相差60度角。
用Ogre::ManualObject类手动写入各个点,再填入三角形索引。
各个正方形的旋转用Ogre::Vector3类和Ogre::Quaternion相乘得到。
用Ogre::ManualObject类的convertToMesh函数将草的三个正方形生成mesh。
由于Mesh比直接用ManualObject要优化很多。
要是模型很复杂,就不必每次都添加点,在建立Mesh,可以将Mesh导出,下次加载即可。
Ogre::MeshSerializer 类的exportMesh函数可以讲mesh导出成文件。

三、添加Ogre::StaticGeometry模型。
Ogre::StaticGeometry模型一旦用build函数创建后,就不能再修改。
1、创建一个Ogre::Entity对象。
2、创建一个Ogre::StaticGeometry 对象。设置它的起点和范围。setOrigin和setRegionDimensions函数
3、将Ogre::Entity对象分别变化不同的平移、旋转、缩放,然后添加到Ogre::StaticGeometry 对象中。
Ogre::StaticGeometry::addEntity函数。
4、Ogre::StaticGeometry::build函数

四、结尾
1、修改Ogre::StaticGeometry 对象,比如让草随风摆动,可以参考grass demo
2、高级对象分批,例如草地和森林,可以参考 PagedGeometry Engine.
3、通过Ogre::SceneManager::createManualObject 函数创建 ManualObject对象


Intermediate Tutorial 7 Render to texture (RTT)


MadMarx Tutorial 1 Simplest Beginning
0、添加头文件
1、创建Root
   new Ogre::Root
2、添加插件
   lRoot->loadPlugin
3、选择 RenderSystem
   lRoot->setRenderSystem();
4、initialise Root对象,只有在RenderSystem被选择以后,才可可以initialise Root对象。
   lRoot->initialise
5、请求RenderSystem创建一个窗口
   lRoot->createRenderWindow()
6、消息队列等待
   Ogre::WindowEventUtilities::messagePump();

7、错误弹出处理
   try
 {
 ……
 }catch(Ogre::Exception &e)
 {
  std::cout<<"!!!!Ogre::Exception!!!!"<<e.what()<<std::endl;
 }catch(std::exception &e)
 {
  std::cout<<"!!!!std::exception!!!!"<<e.what()<<std::endl;
 }

QQQQQ
1、mesh是什么?ManualObject. Meshes
Mesh比直接用ManualObject要优化很多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值