OSG学习笔记-Group(2-3-5)-Impostor

OSG学习笔记-Group(2-3-5)-Impostor

2.3.13 替代节点

替代节点(osgSim::Impostor)继承自osg::LOD节点。*替代节点也是一种布告板,它是通过从当前视点将一个复杂物体对象绘制到一幅图像纹理上来创建的,其中渲染的图像纹理映射到布告板上。*值得注意的是,绘制过程与替代物在屏幕上覆盖的像素点数而不是顶点数或者物体的复杂程度成正比。替代节点可用于物体的一些实例或图形的一些画面,可以加速图像的绘制及渲染。替代节点的另一个优点是可以对纹理图像进行低通滤波,从而生成一张可用于景深效果的模糊图像。

在实际运用中,绘制一个替代节点应该比绘制其所表示的物体要快很多,而且替代物应该和标识的物体非常相像。同样重要的是,替代节点应该可以重复用于挨在一起的多个视点,从而可以有效地利用帧与帧之间的相关性。随着视点距离的加大,物体的投影图像会随之变小,所以通常这种情形意味着可以使用替代节点方法来处理距离视点较远的缓慢运动的物体。就是距离视点比较近,而且运动时有一面总是面向视点的物体也比较适合用替代节点。

很多时候替代节点对当前几何形状的近似不是很好,当错误超过某个范围时,替代节点就会变得无效。通常,对替代物的有效限制就是它的分辨率。当一个远处的替代节点慢慢靠近时,纹理中的单个像素变得越来越明显,原来的视觉效果就慢慢消失,这时就需要根据视点和替代节点的当前位置生成新的替代物。这种情况下,图形纹理的分辨率绝对不能超过屏幕的当前分辨率。

osgSim::Impostor的成员函数:void setImpostorThreshold(float distance);
这个函数用于设置开始启用Impostor的距离,参数可以根据情况适当调节。它继承自LOD节点,因此它同样可以有多个子节点来控制模型的层次显示。

2.3.14 替代节点示例

#include<osgViewer/Viewer>
#include<osg/Node>
#include<osg/Geode>
#include<osg/Group>
#include<osgDB/ReadFile>
#include<osgDB/WriteFile>
#include<osgSim/Impostor>
#include<osgUtil/Optimizer>

int main()
{
    // 创建Viewer对象,场景浏览器
    osg::ref_ptr<osgViewer::Viewer>viewer = new osgViewer::Viewer();
    osg::ref_ptr<osg::Group>root = new osg::Group();
    osg::ref_ptr<osg::Node>node = osgDB::readNodeFile("cow.osg");
    
    // 创建一个替代节点
    osg::ref_ptr<osgSim::Impostor>impostor = new osgSim::Impostor();
    // 设置50.0f以后开始使用贴图
    impostor->setImpostorThreshold(50.0f);
    // 设置模型的显示范围在0-10000以内
    impostor->addChild(node.get(),0,10000.0f);
    
    // 添加到场景
    root->addChild(impostor.get());
    
    // 优化场景数据
    osgUtil::Optimizer optimizer;
    optimizer.optimize(root.get());
    
    viewer->setSceneData(root.get());
    viewer->realize();
    viewer->run();
    
    return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

听风者868

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值