|
看了osg2(我主要关注osgb二进制格式)的插件,对它是如何从文件将文件中的模型节点结构读取出来的没看明白,希望明人指点:
从readNode——>readObject 再到 osgDB::InputStream的readObject 又到osgDB::InputStream 的 readObjectFields,一路盘根错节差不多到了半山腰,也没见什么具体数据的读取的影子,接下来进入readObjectFields,感觉最后的根根节节都在这里呢,首先应该是根据文件顶级父节点(文件根节点)的类型(节点类名)获取对应的对象封皮ObjectWrapper,然后从对象封皮克隆出一个对象来,这个对象还没有文件中对应的具体数据,然后循环对象封皮的Associates,每一个Associates又对应一个对象封皮,找到这个封皮调用封皮的assocWrapper->read( *this, *obj ),然后我们进入到封皮里面的世界,封皮里有好多的序列化器(应该是读取不同的数据类型的),循环所有的序列化器调用serializer->read(is, obj),最后,封皮里还有好多FinishedObjectReadCallback,又调用它们的read(现在应该是没有用到,搜了一下,没有一个实例化得FinishedObjectReadCallback,目前只有一个抽象的FinishedObjectReadCallback存在,估计是为了以后的扩展);到这里差不多就完了,自己天分不行,愣是没看明白怎么把文件中的Group啊PagedLod啊等等一系列节点按照相应的逻辑关系给创建起来。哪位高人给指点指点。
特别是,ObjectWrapper起什么作用?
ObjectWrapper中的Associates又是什么?
我的感觉是,关键的地方可能就在上面这两个东东,可行没看明白,⊙﹏⊙b汗 |
|