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