OSG基础教程:官方的四程序


转载自 第三维度

选自《OSG程序设计教程》第二章第二节

    第一个先来看看刚才我们编的osgViewer.

    1 osgViewer模型查看工具

    osgViewer是这四个程序当中用的最多的OSG程序,代码也非常入门与浅显易懂,在开始->运行->CMD中就可以直接启动osgViewer,因为path中添加了它的路径。 下面来看一下osgViewer的功能,如表1:    

     表1 osgViewer的功能表

    命令:注意有的双杠                            功能
    --image <filename>                            读取纹理文件,比如:osgViewer--image Images/skymap.jpg
    --dem <filename>                              以高程图的形式渲染一个镜像/DEM 比如osgViewer --dem a.img
    --h或--help                                   命令行参数功能帮助
    --help-env                                    所有可用的环境变量帮助
    --help-keys                                   所有可用键帮助
    --help-all                                    展示所有帮助信息
    --SingleThreaded                              为viewer选择单线程模式
    --CullDrawThreadPerContext                    为viewer选择CullDrawThreadPerContext线程模式
    --DrawThreadPerContext                        为viewer选择DrawThreadPerContext线程模式
    --CullThreadPerCameraDrawThr eadPerContext    为viewer选择—CullThreadPerCameraDrawThreadPerContext线程模式

    除此外,当osgViewer在渲染的过程当中,也会有一些基本的操作,同样列表如表2。

       表2

       按键                  功能
       1                     选择TrackBall操作器
       2                     选择Flight操作器
       3                     选择Driver操作器
       4                     选择Terrain操作器
       <                     在窗口模式下减少分辨率
       >                     在窗口模式下增大分辨率
       Driver:Down           在Driver操作器下,光标向下移代表向下看
       Driver:Space          空格代表重置视口,回到原点
       Driver:Up             在Driver操作器下,光标向上移代表向上看
       Driver:a              用鼠标中键和右键加速
       Driver:q              用鼠标Y键控制速度
       S                     输出状态到控制台
       Z                     切换播放与否视口录像
       b                     切换背面锡除与否
       e                     切换是否限制帧速与否,一般60帧就够了,最少30也差不多
       f                     在全屏与不全屏之间切换
       h                     输出帮助信息
       l                     在打开与关闭灯光之间切换
       m                     切换线程模式
       s                     在显示帧速,显示场景时间信息与什么都不显示之间来回切换
       t                     在有无纹理之间切换
       w                     在实体模式,多边形模式,点集模式之间来回切换
       z                     在记录路径与否之间切换

    2 osgVersion库版本检测

    osgVersion应该是这四个程序当中用的最少的一个,它的功能很简单,就是查阅相关的版本信息。命令行参数如表3:

      表3 osgVersion的功能

       命令行                            功能
       -h或者--help                      在屏幕上输出帮助信息
       --entries                         在屏幕上输出每个版本更新时的贡献者数目
       --version-number                  只打印版本号
       --soversion-number                只打印共享对象的版本号
       --openthreads-version-number      打印openthreads的版本号
       --openthreads-soversion-number     只打印openthreads的共享版本号
       -r <file> 或者 --read <file>       读取一个文件用来输出版本更新日志中的贡献者

    通常我们在使用osgversion都只是直接输入它,判断一下当前版本。很多安装包中都没有osgversion,因为在项目编译的时候,它会少一些引号多一些问号等等,可能是由于编码问题,总之人们不愿意去管它,可见它的不重要性。

    3 osgArchive数据归档器

    osgArchive的重要性怎么强调都不为过,它首先是为众多OSG文件以及IVE文件打包提供了一个工具,最主要的还是它所生成的OSGA文件是整个文件,可以为海量数据的存放提供良好的支持。换句话说,你可以先把数据的结点组织好,然后压在一起,最后读一下就可以了。osgArchive是一个压缩工具,曾经在VRDEV上有人问过关于它的问题,FLMN形象的比喻道:它就像是ZIP一样,是个压缩包。可以压缩与解压的工具。 来看一下它的重要的操作,如表2.4所示。

      表2.4 osgArchive的功能

       命令行                      功能
       -h或者--help                它本身没有什么帮助信息,所以这条命令用处不大
       -a或者-archive              指定osga包名,只是指定要操作的包,在后面会举示例说明用途
       -i或者--insert              在包中插入模型,例如:osgarchive -a archive.osga -i cow.osg glider.osg
       -e或者--extract             抽取包中文件,例如:osgarchive -a archive.osga -e cow.osg
       -l或者--list                列出包中所有文件,例如:osgarchive -a archive.osga -l

    下面来实例看一下osgArchive的重要功能,注意有的命令是可以替代的,比如-a也可以用--archive故不再多加描述。

    1:创建新的压缩包。

    创建新压缩包时,需要通过-a <filename>来指定压缩包的文件名,包括其括展名osga,然后将3D文件和图片以-i <filename> [<filename>…]的格式添加到压缩包中。如下所示: Osgarchive –a archive.osga –i cow.osg glider.osg 完成后可以在data中查看到生成了新文件archive.osga,我们也可以使用相同的参数格式压缩整个目录。比如: Osgarchive –a archive.osga –i mydirectory .osga格式还支持主文件的形式,即,设置添加到压缩包的第一个文件是主文件。

    2:列出压缩包中的文件

    我们可以使用-l参数来列出指定压缩包中的所有文件: Osgarchive –a archive.osga –l 会打印出如图2.3所示列表:

osgarchive列表功能
图 2.3 osgarchive列表功能

    3:从压缩包中解压出文件

    我们使用-e <filename> [<filename>…]的形式从指定压缩包中解压文件: 比如:osgarchive –a archive.osga –e cow.osg

    4:使用压缩包文件

    压缩包文件可以按照普通OSG文件的形式来读取,此时第一个解压的文件将做为osgDB返回的结果,如果要另载压缩包的主文件的话,只需要执行: Osgviewer archive.osga 如果希望读取压缩包中的某个文件,则输入: Osgviewer archive.osga/glider.osg 本例是将会输出那个小飞机 编写代码时我们可以按照类似的方式实现压缩包的读取: osg::ref_ptr<osg::Node> masterNode = osgDB::readNodeFile("archive.osga"); osg::ref_ptr<osg::Node> gliderNode = osgDB::readNodeFile("archive.osga/glider.osg");

     5:为osgdem的分页数据生成压缩包

    Osgdem程序支持生成的.osga压缩文件,我们只要指定-a <filename>就可以将生成文件打包,在今后我们会详细讲解osgdem的应用的。

    6:支持压缩的文件格式

    OpenSceneGraph的压缩包机制允许使用istream和ostream来操作压缩包的数据流,但是并不是所有的3D模型和图片格式都支持istream和ostream操作。下面列出了目前支持压缩包机制的几种文件格式:

 .osg OpenSceneGraph 本地ASCII格式
 .ive OpenSceneGraph 本地二进制格式
 .dds DirectDrawSurface图片文件格式
 .jp2 JPEG2000图片文件格式

    眼看着上面的格式显然不是太多,但是通常我们可以将任何的格式,比如FLT和3DS的格式,都转成OSG的格式,而OSG的格式呢,又都会转成IVE的格式,如果我们有自己的格式,那么要使用osgarchive的话就需要改写它里面的代码了,不是十分难。

    4 osgConv格式转换与压缩

    Osgconv在早些年就已经大名鼎鼎,在开始的时候,无论我们将什么格式转换成OSG格式,那么别人获得后都可以查看以及改动,自从osgconv出现后,改变很多。它与OSG的二进制发布格式IVE相呼应,可以把一个,乃至数个文件压缩到一个ive当中,这与osgarchive的不同是:比如A与B都压缩进了c.ive,其实叫转换更合适一些,因为osgConv并不具备太多的压缩功能。

    如果这时osgviewer c.ive那么就会看到A和B都出现在视口中,但是如果是osgarchive把A和B都压入了c.osga中,那么查看时只会出现头文件。不是A就是B。

     osgconv的意义是把多个模型归为一个以及发布它。而osgarchive的意义是模型归档后可以调度其中的一个模型。这使得pagedLod在其中大放光彩,osgdem采用的就是osga格式来调度压缩包OSGA中的各文件。

    首先来举一例来说明它最经常的用途:转换OSG文件格式为IVE文件格式 Osgconv glider.osg glider.ive 这样就会生成一个glider.ive文件 osgConv glider.osg cow.osg a.ive 这样就生成一个a.ive文件,而且在osgViewer a.ive时会同时看到牛和小飞机,只不过小飞机在牛内部,得“走”进去看,因为小飞机太小了。 现在我们来看一下osgconv命令行的其它功能。如表5所示:

      表 5 osgConv的功能

      命令行                                             功能
      - O                                                没有实际意义,表示读写数据操作
      --compressed                                       启用压缩纹理,默认采用OpenGL ARB压缩
      --compressed-arb                                   采用OpenGL ARB压缩纹理
      --compressed-dxt1                                  采用S3TC DXT1压缩纹理
      --compressed-dxt3                                  采用S3TC DXT3压缩纹理
      --compressed-dxt5                                  采用S3TC DXT5压缩纹理
      --fix-transparency                                 使用MAKE_OPAQUE_TEXTURE_STATESET_OPAQUE模式来修正透明属性
      --fix-transparency-mode <mode_string>              使用mode_string模式来修正透明属性,mode_string有以下待选值: MAKE_OPAQUE_TEXTURE_STATESET_OPAQUE MAKE_ALL_STATESET_OPAQUE
      -l libraryName                                     添加一些插件库来读写数据,比如:-l osgdb_pfb
      -e extensionName                                   在上面添加一些读写插件,-e让osgConv识别该扩展名,比如:-e pfb
      -o orientation                                     改变转换模型的坐标原点,建议不要使用。
      -t translation                                     转化时移动模型,建议不要使用
      -s scale                                           转化时旋转模型
      -smooth                                            用重定位法线的方法来光滑模型
      --addMissingColors                                 用白色来添补缺的块什么的,这些块本身没有颜色
      -h或--help                                         打印所有的帮助信息

    在这里再强调一下osgconv的重要性,这些工具当中,除却osgviewer之外,用的最多的就是osgconv了。本身它就是非常非常重要的一个工具。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值