OGRE lod 技术的使用,LOD模型生成及手动设置LOD级别


以ogre1.7.4为例:

在ogre1.7.4\OgreSDK_vc10_v1-7-4\bin\release或debug目录下,存在这样一个程序

OgreMeshUpgrader.exe

这个工具能够将你的任何老版本的 .mesh 文件更新到当前版本的 .mesh 文件。

你可以在Ogre.log文件中得到.mesh文件的版本信息。一般来说,Ogre可以运行老版本的.mesh文件,但是性能上会有一些差别。如果你更新了Ogre的其他部分,你尽量应当将.mesh文件更新为同样的版本。

当然,今天我们的话题是使用OGRE的LOD技术,这个工具还有一个强大的功能就是可以对mesh模型进行多层次细节处理,首先你需要懂一点DOS 命令,进入到ogre1.7.4\OgreSDK_vc10_v1-7-4\bin\release目录下,运行这个程序,根据下面列出的命令来处理mesh模型,当然为了方便起见,我们把源文件路径 目标文件路径都假设为当前目录下,那么你需要把mesh文件拷贝到当前目录下,然后就可以根据命令操作文件生成LOD模型啦, 在OGRE里加载我们处理好的mesh模型的时候,程序会自动根据距离显示不同层次的LOD模型,但是有时候我们发现用这个工具处理的模型不太好,简化的不完美,这种情况请参考我的另外一篇博文,在此不在累述。


使用方法

OgreMeshUpgrate 操作选项 源文件路径 目标文件路径


@echo on

for /R %%i IN (*.mesh) DO %OGRE_HOME%/bin/release/OgreMeshUpgrader.exe %%i

echo 升级完毕...


 

有用的操作选项包括:

-i            =  控制与命令行。

-l  nLODNum  = 指定总LOD层级 ( 该项仅在XML格式转换为Mesh格式时有效 )

-d  nLODDis  = 指定LOD层级间的距离增幅 ( 该项仅在XML格式转换为Mesh格式时有效 )

-p  nLODPer  =  指定每两级LOD层之间三角面减少百分比 ( 该项仅在XML格式转换为Mesh格式时有效 )

-f  nLODNum  =  指定两级LOD层之间的固定顶点减少量 ( 该项仅在XML格式转换为Mesh格式时有效 )

-e            =  关闭模版阴影的edge表

-r            =  关闭Ogre推荐的顶点缓冲区格式。

-t             =  为法线贴图生成切线信息

-d3d          =  转换为D3D颜色格式

-gl           =  转换为GL颜色格式

-srcd3d       =  老版本的mesh文件为D3D颜色格式

-srcgl        =  老版本的mesh文件为GL颜色格式

-E endian      =  设置endian模式,可以选择big, little 或 native ( 默认为native )

 

注意:

这个工具现在允许你自定义重组你的mesh网格文件的顶点格式。

如果你想更新0.15.0之前的任意一个版本的mesh,那么在该程序运行时会问你是否希望进行顶点格式的重组,你输入’y’就可以了。在0.15.0版本之后的mesh在更新时会允许你对该mesh做更多的操作:例如,你可以对每个独立模型节点的顶点指定不同的顶点结构,你既可以自定义顶点结构,也可以使用’automatic’自动模式。

出处:http://blog.csdn.NET/kamaliang/article/details/5495430


OGRE为我们提供了自动生成LOD模型的工具,请参看我的另外一篇文章。但有时候由于该工具生成的自动LOD模型有问题(其原理就是模型简化,比如树模型有很多叶子面片,基本上无论如何简化,面片数都不会有明显的减少,而且将枝干简化后模型会严重形变),针对这种情况,我们可以在建模的时候手工进行模型简化,即导出多个不同精细度模型,然后通过下面的代码加入到OGRE里,程序在判断你指定的摄像机距离的时候就会自动将模型替换。


出处:http://blog.sina.com.cn/s/blog_6250d5a101015yrh.html

Levels ofDetail,意为多细节层次,LOD技术指根据物体模型的节点在显示环境中所处的位置和重要度,决定物体渲染的资源分配,降低非重要物体的面数和细节度,从而获得高效率的渲染运算。

Ogre的网格可以在建模软件中设置LOD,也可以在程序中自定义,注意如果一个mesh文件的LOD等级大于1的话就不能被自定义LOD

在Ogre中可以通过Mesh接口来自定义LOD级别,Ogre会根据用户定义的LOD级别以及摄像机与模型的距离自动给出相应的LOD模型

//载入初始网格

MeshPtrmesh=MeshManager::getSingleton().load("athene.mesh",ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);

//创建LOD模型,第一个参数是和摄像机的距离,第二个是LOD模型资源

mesh->createManualLodLevel(250,"athene_LOD1.mesh");

mesh->createManualLodLevel(500,"athene_LOD2.mesh");

//创建实体

m_entity=render->m_sm->createEntity(mesh->getName());

m_node=render->m_sm->getRootSceneNode()->createChildSceneNode();

m_node->attachObject(m_entity);

m_node->scale(0.1f,0.1f,0.1f);

m_node->setPosition(0.0f,500.0f,0.0f);


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值