查看: 1516|回复: 1

关于 osgDB::writeNodeFile

[复制链接]
  • TA的每日心情
    开心
    2020-1-14 14:24
  • 签到天数: 1 天

    [LV.1]初来乍到

    发表于 2014-7-9 16:37:36 | 显示全部楼层 |阅读模式
    本帖最后由 slxcainiao 于 2014-7-9 16:47 编辑

    问题描述:
        有一些数据,包括地形数据和自定义的建筑物模型数据。
        地形数据利用osgdem生成了分层文件。
        建筑物模型数据利用osg来构建Geometry,之后利用 osgDB::writeNodeFile 来输出数据到osg文件。
        其中 存储顶点的数据类型有:
        osg::ref_ptr<osg::Vec3Array> vc=new osg::Vec3Array();32位
        osg::ref_ptr<osg::Vec3dArray> vc=new osg::Vec3dArray();64位
        之前使用 Vec3dArray 类型,发现Android手机端无法加载文件。原因是Android 底层 Opengl ES 暂时不支持64位,故无法识别 Vec3dArray。
        之后将数据类型修改为 Vec3Array,osgDB::writeNodeFile输出的文件能够被手机加载并识别。
        但是我定义的顶点的坐标被格式化了。

        osg::ref_ptr<osg::Vec3dArray> vc=new osg::Vec3dArray();64位
        VertexArray Vec3dArray 6
            {
              282618.53125 4213654 150
              282682.59375 4213421.5 150
              282879.0625 4213654 150
              282879.0625 4213654 150
              282682.59375 4213421.5 150
              282880.15625 4213421.5 150
            }
        坐标值基本接近自定义的原始数值;
    =============================================
        osg::ref_ptr<osg::Vec3Array> vc=new osg::Vec3Array();32位
       VertexArray Vec3Array 6
            {
              282619 4.21365e+006 150
              282683 4.21342e+006 150
              282879 4.21365e+006 150
              282879 4.21365e+006 150
              282683 4.21342e+006 150
              282880 4.21342e+006 150
            }
        很明显,数据被格式化过,而且误差很大了。
    =================================================
        之后,尝试先进行 MatrixTransform ,将场景进行平移,使场景中心点作为(0,0,0),以期望减小坐标值的长度,之后将geode作为child加载到   MatrixTransform 下。
       输出osg文件数据如下:
      MatrixTransform {
        UniqueID MatrixTransform_0
        nodeMask 0xffffffff
        cullingActive TRUE
        referenceFrame RELATIVE
        Matrix {
          1 0 0 0
          0 1 0 0
          0 0 1 0
          282376  4.21388e+006  0  1
        }
       。。。。。。。。。。。。。
      VertexArray Vec3Array 6
              {
                242.701 -227.989 150
                306.764 -460.489 150
                503.233 -227.989 150
                503.233 -227.989 150
                306.764 -460.489 150
                504.326 -460.489 150
              }
    ================================================

       上述相关输入的原始数据:
       MatrixTransform   osg::Vec3d trans=osg::Vec3d(282375.83000000002,4213881.9890000001,0.0);

        Vec3dArray的6个值:
    [0]        { _xCoor=282618.53125000000 _yCoor=4213654.0000000000 _zCoor=150.00000000000000 }
    [1]        { _xCoor=282682.59375000000 _yCoor=4213421.5000000000 _zCoor=150.00000000000000 }
    [2]        { _xCoor=282879.06250000000 _yCoor=4213654.0000000000 _zCoor=150.00000000000000 }       
    [3]        { _xCoor=282879.06250000000 _yCoor=4213654.0000000000 _zCoor=150.00000000000000 }       
    [4]        { _xCoor=282682.59375000000 _yCoor=4213421.5000000000 _zCoor=150.00000000000000 }       
    [5]        { _xCoor=282880.15625000000 _yCoor=4213421.5000000000 _zCoor=150.00000000000000 }       

    场景范围:
                    XMax        282875.83        double
                    XMin        281875.83        double
                    YMax        4214381.989        double
                    YMin        4213381.989        double


    ====================================================================
    地形利用osgdem生成,而他输出的文件中的数据看起来保存的比较完整:
    PagedLOD {
          nodeMask 0xffffffff
          cullingActive TRUE
          Center 282875.84375 4213882 67.206787109375
          Radius -1
          RangeMode DISTANCE_FROM_EYE_POINT

           .....................................
    高度
    Heights
                  {
                    69.5078811645508 69.2155151367188 68.8520278930664 68.6271667480469 68.7114410400391 69.0150146484375 69.3222427368164 69.5664978027344 69.9128265380859 70.3904647827148
    ......................................


    我定义建筑物模型使用的是:wgs84   utm  50区

    求教大神:有没有好的处理方式来解决上述问题。
    谢谢。







    该用户从未签到

    发表于 2014-7-10 13:12:52 | 显示全部楼层
    坐标值过大肯定需要matrix否则精度就有问题
    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    OSG中国官方论坛-有您OSG在中国才更好

    网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

    联系我们

    • 工作时间:09:00--18:00
    • 反馈邮箱:1315785073@qq.com
    快速回复 返回顶部 返回列表