查看: 4289|回复: 10

关于模型简化

[复制链接]

该用户从未签到

发表于 2010-6-7 16:11:27 | 显示全部楼层 |阅读模式
现在工作涉及到模型的简化处理;想实现的目标是:能任意简化模型中某个局部范围内的点,比如墙体上的窗户;看了osgUtil::Simplifier源码,大致明白其简化流程:
1)遍历geometry,找出所有点(包括与该点相关的三角形)、边(包括与该边相关的点和三角形)、三角形(相关的边和点)
2)根据二面角的余弦值(两个面法线的内积)来计算待塌陷边的重要性测度(介于0--2之间):该值反映了某点周围的局部范围是否平坦
3)计算所有边的塌陷代价;该代价定义如下:当设置的简化抽样率大于1时,根据边长来确定,否则根据边中点到共用该边所有三角形平面距离和的平均值来确定
4)按边塌陷代价从小到大排列
5)如果最小的塌陷代价在容许范围内,则折叠(塌陷)该边
6)重新计算塌陷代价
7)如果塌陷代价超出容许范围,则更新geometry
现在的问题是:osgUtil::Simplifier处理的对象是某个geometry。而模型上的某个感兴趣区域(比如窗户)未必就刚好是一个geometry。对于这种情况,请教有相关经验的朋友是怎么处理的?谢谢

该用户从未签到

发表于 2010-6-7 16:46:43 | 显示全部楼层
模型简化的算法一般有两种:边塌陷与顶点塌陷,以及两者的综合。如果您想要处理某个区域,或者对于简化过程中的某些边界需要进行约束,那么OSG目前没有提供这么复杂的工具,事实上这也不是渲染引擎应当关注的范畴,您可以在网络上寻求一些成熟的算法或者自行研究;我个人研究过QSlim,它应该是一个不错的解决方案

该用户从未签到

 楼主| 发表于 2010-6-7 20:17:21 | 显示全部楼层
谢谢!
上网查了下QSlim
网上的代码大多是unix等系统下编译而成,还没有发现windows版本
明天再来看看

该用户从未签到

发表于 2010-6-8 08:28:02 | 显示全部楼层
事实上我个人已经用OSG实现了QSlim算法,不过暂时还不想把它贡献出来

该用户从未签到

 楼主| 发表于 2010-6-8 08:49:44 | 显示全部楼层
后生可畏

该用户从未签到

 楼主| 发表于 2010-6-8 11:07:43 | 显示全部楼层
刚才做了个小实验
发现osgUtil::Simplifier更适合做地形方面的简化工作
而对于建筑物,它的功能似乎非常有限
看来,对建筑物的简化,需要另起炉灶了
再次感谢array的指点

该用户从未签到

 楼主| 发表于 2010-6-8 17:44:05 | 显示全部楼层
如果一个模型仅由边界边和与边界边相接的边构成
那么不管这个模型多么复杂
osgUtil::Simplifier都将无能为力
对于建筑物的立面、以及一些柱状的模型
大多属于这一类
所以,osgUtil::Simplifier不适合做建筑物模型的简化
osgUtil::Simplifier优势在于:
经过简化处理后,模型肯定不会变形

该用户从未签到

发表于 2011-12-3 14:55:25 | 显示全部楼层
csu_zjh 发表于 2010-6-8 17:44
如果一个模型仅由边界边和与边界边相接的边构成
那么不管这个模型多么复杂
osgUtil::Simplifier都将无能为 ...

关于这个模型简化算法,您实现了吗。如果有过这方面的经验的话,给点提示和建议,或者思路吧。谢谢

该用户从未签到

发表于 2013-8-7 11:49:53 | 显示全部楼层
学习了

该用户从未签到

发表于 2013-8-8 08:19:10 | 显示全部楼层
qslim算法有现成的源代码的 你可以上网搜一下,有例子程序,效果还不错,目前在测试阶段,关键是速度很快,osg的简化算法比较慢

该用户从未签到

发表于 2013-8-12 09:47:56 | 显示全部楼层
您忽视了实时模型简化的一个关键问题,就是纹理坐标的简化。osg的做法与qslim没有太大的差别,但是必须考虑到纹理坐标的问题因此无法对整个模型顶点直接做统一的索引。这也是包括qslim在内的大部分简化算法都被迫回避以及无法完美解决的问题
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表