osg3.4.1 osgearth2.8 Android安卓移植(三)

测试读取osgt和osgb格式时,发现没有纹理,手动指定一张图片却可以。

原因1

在读取osgt和osgb格式文件时,崩溃,发现是读取jpeg出问题了,调用函数时会崩溃。

编的的动态库,改编成静态库就正常了。

原因2

跟踪调试发现是osg在反序列化时,将Texture2D,Material等(继承自类StateAttribute)动态转型为StateAttribute失败:

源码在osgDB::InputStream中167行这个模板函数:

    template<typename T>
    T* readObjectOfType()
    {
        osg::ref_ptr<osg::Object> obj = readObject();
        T* ptr = dynamic_cast<T*>(obj.get());
        if (ptr) { obj.release(); return ptr; }
        else return 0;
    }

这个函数是将最基类转为中间基类(而不是转为实际指向的子类)失败!奇怪的是同样反序列化将osg::Geometry转为osg::Drawable成功了,在Windows下面是没问题的。

目前原因未知:将这个函数更改如下即可:

    template<typename T>
    T* readObjectOfType()
    {
        osg::ref_ptr<osg::Object> obj = readObject();
        T* ptr = dynamic_cast<T*>(obj.get());

        if(!ptr)
            ptr = reinterpret_cast<T*>(obj.get());

        if (ptr) { obj.release(); return ptr; }
        else return 0;
    }

即如果转型失败将强制转型。不过讲道理这个转换是不应该失败的,可能是Android下面编译器哪里规范不一样,以后有时间再排查。

更改之后osgb倾斜摄影格式文件正确加载!


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Qt OSGEarth 2.8 是一个基于 Qt 开发框架和开源的 OSGEarth 地球可视化库的版本。OSGEarth 是一个功能强大的地球可视化工具,用于创建交互式的地球场景,它是 OpenSceneGraph(OSG)的一个插件。而 Qt 是一款跨平台的图形用户界面开发框架。 Qt OSGEarth 2.8 的发布意味着它在功能和性能方面得到了进一步的改进和优化。它可能通过增加新的功能、修复已知问题和提高性能来提升用户体验。 由于使用 Qt 开发框架,Qt OSGEarth 2.8 具有很好的跨平台兼容性。这意味着开发人员可以使用同一份代码在不同的操作系统上运行他们的应用程序。无论是在 Windows、macOS 还是 Linux,使用 Qt OSGEarth 2.8 开发的应用程序都可以良好地运行。 Qt OSGEarth 2.8 可以帮助开发人员创建交互式的地球场景,这对于需要展示地理数据或地图信息的应用程序非常有用。无论是在教育、旅游、可视化分析还是 GIS 领域,Qt OSGEarth 2.8 都可以提供丰富的功能和工具来满足不同的需求。 总之,Qt OSGEarth 2.8 是一个功能强大、具有跨平台兼容性的地球可视化库,它可以帮助开发人员在不同操作系统上创建交互式的地球场景,展示地理数据和地图信息。 ### 回答2: Qt是一种跨平台的应用程序开发框架,而OSGearth2.8是基于开源软件OpenSceneGraph(OSG)的一个地球可视化工具包。Qt提供了一种方便的方式来开发具有图形界面的应用程序,而OSGearth则是在Qt的基础上提供了地球可视化功能。 使用Qt和OSGearth2.8可以开发各种类型的地球可视化应用程序,例如地图导航、地理信息系统(GIS)应用等。开发人员可以利用Qt的丰富的界面库和OSGearth的强大的地球渲染引擎来创建交互式和具有吸引力的地图应用。 在Qt和OSGearth的组合中,Qt负责应用程序的界面设计和逻辑控制,可以通过Qt的各种控件和布局工具来创建用户友好的界面。而OSGearth则负责地球可视化的部分,它利用OSG提供的渲染引擎来展现地球数据,包括地形、地图、影像等。OSGearth还提供了一些强大的功能,如地球影像的投影、三维模型的加载和渲染等。 使用Qt和OSGearth进行地球可视化开发的好处是,它们都是开源的软件,可以免费使用和修改。同时,它们也是跨平台的,可以在Windows、Mac和Linux等多个操作系统上运行。这样可以使开发人员更加方便地进行应用程序的设计和测试。 总而言之,Qt和OSGearth2.8是一对强大的组合,可以帮助开发人员实现各种类型的地球可视化应用程序,并提供了丰富的界面和功能。无论是地图导航还是GIS应用,Qt和OSGearth都能够满足开发人员的需求,并提供高效、可靠的开发解决方案。 ### 回答3: Qt OSGEarth 2.8 是一个开源的地理信息系统(GIS)软件开发工具包,它结合了Qt和OSG(OpenSceneGraph)两个技术框架。 Qt是一个跨平台的C++应用程序开发框架,它提供了丰富的图形界面和功能组件,能够方便地开发各种类型的应用程序。OSG是一个针对3D图形应用开发的工具包,它提供了强大的渲染和场景管理功能,可以让开发者创建逼真的3D场景。 Qt OSGEarth 2.8充分利用了两个框架的优势,提供了高效便捷的GIS开发环境。它支持多种数据源,包括地理信息系统(GIS)数据、图像数据和模型数据等。通过使用Qt OSGEarth 2.8,开发者可以轻松地加载和显示地理数据,并在3D场景中进行交互操作。 Qt OSGEarth 2.8还提供了丰富的功能组件和API接口,方便开发者进行数据查询、坐标转换、图层叠加和图形绘制等操作。此外,它还支持用户自定义插件,可以根据需求扩展和定制功能。 总的来说,Qt OSGEarth 2.8 是一个功能强大、易于使用的GIS开发工具包。它集成了Qt和OSG两个技术框架的优势,提供了高效的GIS开发环境,可以满足各种类型的地理信息应用需求。无论是开发地图应用、地理数据可视化应用还是虚拟仿真应用,Qt OSGEarth 2.8 都是一个不错的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值