zoukankan      html  css  js  c++  java
  • OSG-视口&LOD&Imposter

    本文转至http://www.cnblogs.com/shapherd/archive/2010/08/10/osg.html
    作者写的比较好,再次收藏,希望更多的人可以看到这个文章

    互联网是是一个相互分形并学习的平台,我希望我每个人可以将我们认为有价值的东西,在不损害他人利益的情况下分享给更多的人。

    多视口

    多视口的原理是自己创建所有的相机,包括主相机,这样我们可以随意的添加相机。
    首先我们要创建视口必须有以下几件东西,第一,了解整个屏幕的分辩率有多大,这样可以分辩视口的大小,好分割开来。第二,上下文。我们必须自己手动的打开设置上下文。每个视口的数据也不一定非要与主视口的相同。但是矩阵一般是同步的。也就是说:主视口里有栋楼,从视口里可以是平面图什么的。了解整个屏幕的分辩率可以用这个类:osg::GraphicsContext::WindowingSystemInterface意思是说系统接口,可以获得当前环境的各种信息。有一方法叫getScreenResolution,可以得到分辩率。之后上下文了,osg::GraphicsContext里面可以设置窗口大小,缓存什么的,大多数的东西都在这里面设置。

    LOD

    LOD即level of details
    LOD比起PagedLOD而言并非十分的常用,有个地方用的特别多,那就是把一个好好的模型加一个视矩压成一个模型,这个模型比以前的看来就是多了个视矩的控制,远了看不见,近了能看见。
    在模型中加LOD头结点的方式如下所示:

    #include<osgDB/Registry>
    #include<osgDB/ReadFile>
    #include<osgDB/ReaderWri ter>
    #include<osgDB/Wri teFile>
    #include<osg/Node>
    #include<osgViewer/Viewer>
     int main()
    {
    osgViewer::Viewer viewer;
     //读取模型
    osg::Node*node=osgDB::readNodeFile("fountain.osg");
     //隐藏结点
    node->asGroup()->getChild(0)->setNodeMask(0);
    viewer.setSceneDa ta(node);
     //输出结点到free.os g中 
    osgDB::writeNodeFile(*(viewer.getSceneData()),"free.osg",osgDB::Registry
    ::instance()->getOptions());
     return 0;
    }

    Imposter

    Imposter用动态图片来替换场景的实用技术:imposter.可以把它法做LOD一样使用,只不过它
    不是变模型变没有,而是使它换成一张图
    示例代码如下:设置一个视矩,超过这个视距模型会变为一张动态图

    #include<osgViewer/Viewer>
    #include<osgGA/TrackballManipulator>
    #include<osgSim/Impostor>
    #include<osgDB/ReadFile>
     int main(inta rgc,cha r**a rgv)
    {
     //申请viewer
    osgViewer::Viewer viewer;
     //读取模型
    osg::Node*node=osgDB::readNodeFile("ceep.ive");
     //申请一个i mpos tor结点
    osgSim::Impos tor*sim=new osgSim::Impostor;
    //在到之内显示模型,之外显示贴图
    sim->addChild(node,0,50000);
    sim->setImpostorThreshold(1000);
    osg::Group*root=new osg::Group;
    root->addChild(sim);
    viewer.setSceneData(root);
    viewer.realize();
    viewer.run();
    return 0;
    }





  • 相关阅读:
    模块二
    lambda map() filter() zip()练习
    装饰器
    函数模块回顾
    连接不同数据OleDb(不完整)
    连接不同的数据库
    连接数据库ORACLE(不完整)
    多数据之间的连接操作ODBC(不完整)
    ora0131
    ORACLE linux 下 sqlplus命令
  • 原文地址:https://www.cnblogs.com/DreamDog/p/9160006.html
Copyright © 2011-2022 走看看