OGRE教程学习笔记-1.3

真倒霉,昨天下午才写完的东西,没有保存好,就没有了,刚才写完,现在把这一章节的内容放在下面:

 

1创建场景管理器

mSceneMgr = mRoot->createSceneManager("FooSceneManager");

SceneManager* Ogre::Root::createSceneManager

(

const String

typeName,

 

 

const String

instanceName = StringUtil::BLANK

 

 

)

 

 

 

创建一个给定类型的场景管理器实例

评论:

你可以使用这种方法去创建一个给定类型的场景管理器。你可能知道一些已经存在的类型,或者你可能通过查看getMetaDatalterator的获得相应的类型

注意:

如果类型名不能够找到的话,调用这该方法将会抛出异常

参数:

typeName:一个确定唯一的场景管理器类型的字符串

instanceName:才被创建的新实例的可选名字。如果你给出这个参数的值的话,系统将自动分配一个名字

 

2得到场景管理器的指针

SceneManager *bar = mRoot->getSceneManager(“FooSceneManager”);

 

SceneManager* Ogre::Camera::getSceneManager(void) const

 

返回一个指向场景管理器所渲染摄像机的指针

 

3. 在场景中添加地面

mSceneMgr->setWorldGeometry( "terrain.cfg" );

 

virtual void Ogre::SceneManager::setWorldGeometry(

                       const String & filename

                                                  )[virtual]

     

 

 

设置世界三维物体的资源

大的,主要是静态三维物体构成世界的空间和场景

 

评论:

依赖于场景管理器的类型,你需要通过Root或者SceneManagerEnumerator类,你可以通过传递给该方法一个文件名,它将会尝试着加载将要使用的世界级三维物体。如果你尝试加载一个不合适的世界数据,将会抛出异常。默认的SceneManager不能处理所有的世界上的所有三维物体,因此将会经常抛出异常。像BspSceneManager的子类可以加载一些形如“q3dm1.bsp”的特殊类型的世界三维物体。

 

4初始化所有的资源组:

ResourceGroupManager::getSingleton().initialiseAllResourceGroups();

 

virtual BackgroundProcessTicket Ogre::ResourceBackgroundQueue::initialiseAllResourceGroups(

                                     Listener * listener = 0

                                                           )[virtual]

 

   

virtual BackgroundProcessTicket Ogre::ResourceBackgroundQueue::initialiseAllResourceGroups

   

 

(

   

 

 

 

Listener

   

listener = 0

   

 ) 

   

[virtual]

 

初始化那些将要在背景中初始化的所有资源组。

你也可以去查阅ResourceGroupManager::intialiseResourceGroup

参数:

    Listener 可选的回调接口,记录头文件中的警告信息,了解他才可以用它

返回:

  Ticket 确定回调的接口,使用isProcessComplete()方法去决定是否使用listener完成

 

5设置天空盒:

mSceneMgr->setSkyBox( true, "Examples/SpaceSkyBox" );

 

virtual void Ogre::SceneManager::setSkyBox

(

bool 

enable,

 

 

const String

materialName,

 

 

Real 

distance = 5000,

 

 

bool 

drawFirst = true,

 

 

const Quaternion

orientation = Quaternion::IDENTITY,

 

 

const String

groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME

 

 

)

 

 

 

 

设置天空盒显示与否

和以摄像机观察到天空保持固定距离的6边型盒子

评论:

你可以使用标准的网格和实体去创建一个天空盒,但是它创建了一个摄像机不能接近或者远离的平面,因为他伴随着摄像机一起移动。

 

你所使用创建天空盒的材质可以包含一些单独材质层,或者他们可以是有6个图像构成的立方体材质,平面的每一个面是立方体。查看更多信息请查阅TextureUnitState

参数:

   enable :True时创建天空盒false时不创建天空盒

   materialName:天空盒所使用的材质名字

   distance:摄像机到每个盒子平面在世界坐标系中的距离,默认值通常是OK

drawFirst :如果是ture,盒子在所有的场景中的三维物体之前渲染,不需要更新深度缓存。这是最安全的渲染方法,因为所有的物体都会出项在天空前面。然而如果大部分天空被物体阻挡,

这不是最有效的方法。如果在这种情况下,你可以设置这个参数为false,以为它在所有的三维物体之后渲染,这也是一种最优化方法。然而你要确保距离值应该足够大,一次所有在天空盒里的物体都会被不会超过天空盒的范围

Orientation:明确天空盒方向的可选参数。默认情况下,盒子的顶部不认为是Y轴的正方向,盒子的前部被认为是-Z轴方向。你可以用这个参数去确定天空的位置。

groupName:分配给plane网格的资源组名字

 

6 天空穹

mSceneMgr->setSkyDome( true, "Examples/CloudySky", 5, 8 );

 

virtual void Ogre::SceneManager::setSkyDome

(

bool 

enable,

 

 

const String

materialName,

 

 

Real 

curvature = 10,

 

 

Real 

tiling = 8,

 

 

Real 

distance = 4000,

 

 

bool 

drawFirst = true,

 

 

const Quaternion

orientation = Quaternion::IDENTITY,

 

 

int 

xsegments = 16,

 

 

int 

ysegments = 16,

 

 

int 

ysegments_keep = -1,

 

 

const String

groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME

 

 

)

 

 

 

 

设置天空穹的现实与否

一个曲线天空的假象

 

评论:

天空穹实际是是有立方体的5个面组成。伴随着纹理坐标的生成,产生一个弯曲的穹顶。当你需要一个没有雾的逼真的场景,而且总是地面来防止观察者看到地平线的时候,天空穹是一个不错的选择。如果你需要一个一个完整的包裹背景的话,使用setSkyBox代替。实际上,你可以采用结合天空盒和天空穹的方法,产生一个有云层覆盖的弯曲天空穹。

 

天空穹可以和产生形如云的重复纹理的2D一起运行。你可以通过更改曲率来适应场景的需要。然而高曲率更适合于FPS层,在这个层,你不能一次看到需到天空,夸张的曲线看起来不错。

 

参数:

enable :True时创建天空穹,false时不创建天空穹

   materialName:天空穹所使用的材质名字

curvature:天空穹的曲率。值最好设子在265之间。大值弯曲的更狠可以产生比较光滑的效果,小值弯曲的不太明显,这也意味着水平方向的曲率越大,远距离效果会更好

tiling: 贴图重复的次数

   distance:摄像机到每个盒子平面在世界坐标系中的距离,默认值通常是OK

drawFirst :如果是ture,盒子在所有的场景中的三维物体之前渲染,不需要更新深度缓存。这是最安全的渲染方法,因为所有的物体都会出项在天空前面。然而如果大部分天空被物体阻挡,

这不是最有效的方法。如果在这种情况下,你可以设置这个参数为false,以为它在所有的三维物体之后渲染,这也是一种最优化方法。然而你要确保距离值应该足够大,一次所有在天空盒里的物体都会被不会超过天空盒的范围

Orientation:明确天空盒方向的可选参数。默认情况下,盒子的顶部不认为是Y轴的正方向,盒子的前部被认为是-Z轴方向。你可以用这个参数去确定天空的位置。

groupName:分配给plane网格的资源组名字

 

 

7.天空面

Plane plane;

       plane.d = 1000;

       plane.normal = Vector3::NEGATIVE_UNIT_Y;

 

mSceneMgr->setSkyPlane( true, plane, "Examples/SpaceSkyPlane", 1500, 75 );

 

virtual void Ogre::SceneManager::setSkyPlane

(

bool 

enable,

 

 

const Plane

plane,

 

 

const String

materialName,

 

 

Real 

scale = 1000,

 

 

Real 

tiling = 10,

 

 

bool 

drawFirst = true,

 

 

Real 

bow = 0,

 

 

int 

xsegments = 1,

 

 

int 

ysegments = 1,

 

 

const String

groupName = ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME

 

 

)

 

 

 

 

决定天空面的显示与否

 

评论:

    你可以使用标准的网格和实体去创建一个天空面,但是它创建了一个摄像机不能接近或者远离的平面,因为他伴随着摄像机一起移动。

注意:

     可以使用TextureUnitStata类的方法使天空材质缩放,宣传等

参数:

   enable :True时创建天空面,false时不创建天空面

  plane:天空面的具体细节问题,比如说它离摄像机的距离

   materialName:天空穹所使用的材质名字

scale:应用在天空面上的缩放比例,大值意味着一个比较大的天空面,你可以基于planed和场景的一些其他参数去调整这个值

tiling: 贴图重复的次数

   distance:摄像机到每个盒子平面在世界坐标系中的距离,默认值通常是OK

drawFirst :如果是ture,盒子在所有的场景中的三维物体之前渲染,不需要更新深度缓存。这是最安全的渲染方法,因为所有的物体都会出项在天空前面。然而如果大部分天空被物体阻挡,

这不是最有效的方法。如果在这种情况下,你可以设置这个参数为false,以为它在所有的三维物体之后渲染,这也是一种最优化方法。然而你要确保距离值应该足够大,一次所有在天空盒里的物体都会被不会超过天空盒的范围

bow : 如果值为0,那么天空面将是很平整的,如果值大于0,天空面将有曲度,这种情况下允许天空低于摄像机层。弯曲的天空面和天空穹相似,但是更适合使用雾化效果

xsegments,ysegmentsxy的线段数量,当你使天空面弯曲的时候,这个值非常重要,但是如果你想用天空面的一部分来展示每个顶点的效果的时候,这个值很有用

Orientation:明确天空盒方向的可选参数。默认情况下,盒子的顶部不认为是Y轴的正方向,盒子的前部被认为是-Z轴方向。你可以用这个参数去确定天空的位置。

groupName:分配给plane网格的资源组名字

 

8设置背景颜色

ColourValue fadeColour(0.9, 0.9, 0.9);

       mWindow->getViewport(0)->setBackgroundColour(fadeColour);

 

void Ogre::Viewport::setBackgroundColour

(

const ColourValue

colour

 ) 

在渲染前设置视口的初始化背景颜色

9设置雾化效果

mSceneMgr->setFog(FOG_LINEAR, fadeColour, 0.0, 10, 150);
 

virtual void Ogre::AutoParamDataSource::setFog

(

FogMode 

mode,

 

 

const ColourValue

colour,

 

 

Real 

expDensity,

 

 

Real 

linearStart,

 

 

Real 

linearEnd

 

 

)

 

 

 

注:API中没有相应的解释
 
OGRE---
记于2009-12-1

 

 

 

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值