Skip to content

Latest commit

 

History

History
40 lines (29 loc) · 4.23 KB

环境变量.md

File metadata and controls

40 lines (29 loc) · 4.23 KB

OSG以及osgviewer程序提供了非常多的环境变量,不过你需要尽快了解和熟悉其中的两个。在使用OSG进行设计时,你会经常用到这两个环境变量。

文件搜索路径

环境变量 OSG_FILE_PATH 指定了OSG程序读取图形和模型文件时的搜索路径。

如果你运行命令 osgviewer cow.osg,但是当前目录中并没有cow.osg,OSG 将在 OSG_FILE_PATH指定的路径中查找并读取这个文件。 安装 OSG 的运行时文件时,将自动设置 OSG_FILE_PATH 变量。

你可以向这个变量中添加更多的目录。在 Windows 系统下,使用分号分隔各个目录,在其它系统下则使用冒号。如果环境变量为空或者没有设置,OSG在读取图形和模型文件时只搜索当前的目录。

要添加指定的数据目录到数据文件路径表,可以使用osgDB::Registry::getDataFilePathList()函数。 osgDB::Registry是一个单态类(singleton),因此要调用这个函数的话,需要使用单态类的实例。函数会返回 一个 osgDB::FilePathList的指针,也就是一个简单的std::deque<std:: string>。假如要从一个字符串 newpath 中添加目录到列表的话,可以使用下面的代码:

osgDB::Registry::instance()->getDataFilePathList().push_back( newpath );

调试信息显示

OSG 可以将各式各样的调试信息输出到std:cout。这在开发 OSG 程序时十分有用,你可以借此观察 OSG的执行的各种操作。

环境变量OSG_NOTIFY_LEVEL 用于控制 OSG 调试信息显示的数量。你可以将此变量设 置为七个不同的信息量层级之一: ALWAYS (最简略) , FATAL, WARN, NOTICE,INFO,DEBUG_INFO以及 DEBUG_FP(最详细) 。

一个典型的OSG开发环境可以设置 OSG_NOTIFY_LEVEL 为NOTICE,如果要获取更多或者更少的输出信息,可以根据信息量的详细程度上下调整此变量。

插件的搜索和注册

OSG 插件也就是是一组动态链接库,其中实现了osgDB头文件ReaderWriter定义的的接口。为了保证 OSG可以找到这些插件,插件所在目录必须在Windows的PATH环境变量或者Linux的LD_LIBRARY_PATH 中列出。最终用户也可以在OSG_LIBRARY_PATH环境变量中指定新的插件搜索路径。OSG仅识别符合下面的命名格式的插件库。

  • Apple——osgdb_
  • Linux——osgdb_.so
  • Windows——osgdb_.dll

通常指文件的扩展名。例如,读取GIF图片的的插件在Linux系统下名为 osgdb_gif.so。 对于开发者来说,使用文件扩展名来命名插件的方法并不一定总是适用,因为有的插件可以支持多种文件的扩展名。例如用于读取RGB图形的插件,事实上可以读取这些格式的文件:.sgi,.int,.inta,.bw,.rgba,.rgb。osgDB::Registry的构造函数包括了特定的代码来实现这类插件。Registry类维护了一个扩展名的化名映射表来对应不同的文件格式和支持此类格式的插件。

警告: 插件不一定同时支持读取和写入的操作。例如,OSG目前的版本仅支持3D Studio Max插件中.3ds文件的读取操作,而不支持写入.3ds文件的操作。事实上,多数OSG插件仅支持文件的读入,而不支持输出。

OSG不可能查找并加载所有的插件以获取它们支持的文件格式。这样在程序启动时将会是一笔很大的开销。因此,OSG 使用职责链(Chain of Responsibility)的设计模式[Gamma95],以加载尽量少的插件。当用户程序尝试使用osgDB读取或写入文件时,OSG将按照下面的步骤来查找合适的插件:

  1. OSG搜索已注册的插件列表,查找支持文件格式的插件。开始时已注册 插件列表仅包含了 Registry 类构造函数中注册的插件。如果OSG找到了可以支持此文件格式的插件,并成功执行了I/O操作,那么它将返回相应的数据。
  2. 如果没有发现可以支持此格式的已注册插件,或者I/O操作失败,那么OSG将根据前述的文件命名规则创建插件文件的名称,并尝试读取相应的插件库。如果读取成功,OSG将添加此插件到已注册插件列表中。
  3. OSG 将重复执行步骤 1。如果文件I/O的操作再次失败,OSG将返回失败信息。