osgDB.Registry 是一个注册表,用于存储和管理场景图的数据格式和读取器。当加载场景图时,OpenSceneGraph使用 osgDB.Registry 中的读取器查找和解析所需的文件格式。
要将新的数据格式注册到 osgDB.Registry,可以使用以下代码:
osgDB::Registry::instance()->addFileExtensionAlias("my_format", "my_format_extension");
osgDB::Registry::instance()->addReaderWriter(new MyFormatReaderWriter);
第一个语句将“my_format_extension”映射到“my_format”名称,这是用户在加载文件时使用的名称。这就使得OpenSceneGraph能够从文件中读取数据并调用正确的MyFormatReaderWriter对象。
第二个语句创建并添加 MyFormatReaderWriter 对象到 osgDB.Registry。MyFormatReaderWriter 是用户自己创建的从指定文件格式读取数据的读取器-写入器。
osgDB.Registry 支持多种方法用于获取已经注册的读取器。可以使用以下方法之一:
osgDB::ReaderWriter* rw = osgDB::Registry::instance()->getReaderWriterForExtension("my_format_extension");
osgDB::ReaderWriter* rw = osgDB::Registry::instance()->getReaderWriterForMimeType("my_format_mime_type");
osgDB::ReaderWriter* rw = osgDB::Registry::instance()->getReaderWriterForProtocol("my_format_protocol");
第一种方法获取了注册了 my_format_extension 扩展名的读取器,第二种方法获取了适用于 my_format_mime_type MIME 类型的读取器,第三种方法获取了适用于 my_format_protocol 协议的读取器。
如果您知道要加载的文件格式的 MIME 类型,协议或扩展名,只需调用任何一种方法即可获得适当的读取器。这些方法也可用于检测某个格式是否已经被注册。
osgDB.Registry 还支持注册文件查找器。当需要加载某个文件时,OpenSceneGraph将通过所有已注册的查找器查找文件。以下是如何注册一个新的查找器:
osgDB::Registry::instance()->setArchiveExtension("my_archive_extension");
osgDB::Registry::instance()->addFileLocation("/path/to/my/files");
osgDB::Registry::instance()->setFileListCallback(new MyFileListCallback);
第一个语句告诉 OpenSceneGraph 使用 my_archive_extension 扩展名来寻找文件归档文件。
第二个语句将 "/path/to/my/files" 添加到默认查找路径中。
第三个语句创建并注册了一个 MyFileListCallback 对象,它提供了用户自定义的文件查找器的实现方式。
可以使用以下方法之一来获取 osgDB.Registry 的查找路径:
const osgDB::FilePathList& pathList = osgDB::Registry::instance()->getDataFilePathList();
const osgDB::FilePathList& pathList = osgDB::Registry::instance()->getLibraryFilePathList();
getDataFilePathList() 返回数据文件的默认查找路径,getLibraryFilePathList() 返回库文件的默认查找路径。
osgDB.Registry 还支持注册回调函数,以便在读取器或查找器查找文件时通知用户。以下是如何注册一个回调函数:
osgDB::Registry::instance()->addFileReadCallback(new MyFileReadCallback);
该语句创建并注册了一个 MyFileReadCallback 对象,该对象提供了用户在读取器读取文件时处理文件数据的方法。
osgDB.Registry 是一个非常有用的类,它可以大大简化加载数据和查找文件的过程。注册文件格式,查找器和回调函数可以极大地扩展 OpenSceneGraph 的功能和应用程序的功能。