查看: 2337|回复: 8

有关osgEphemeris的问题

[复制链接]

该用户从未签到

发表于 2009-9-17 14:38:51 | 显示全部楼层 |阅读模式
最近从osg的svn上下了个osgEphemeris的库,正确cmake,并编译后,生成了所需的osgEphemerisd.dll,osgEphemerisd.lib,osgdb_osgephemerisd.dll三个文件,在自己的程序中使用的时候,编译没有问题,但链接的时候会出错,将节点输出成.osg文件,发现文件是空的,看来是dll没起作用
不知道有没有人用过这个库,或是碰到过类似的问题?

该用户从未签到

发表于 2009-9-17 14:44:53 | 显示全部楼层
我编译过这个库的RELEASE版本,没有遇到您说的问题

该用户从未签到

 楼主| 发表于 2009-9-18 10:35:08 | 显示全部楼层
我编译过这个库的RELEASE版本,没有遇到您说的问题
array 发表于 2009-9-17 14:44


又编了一遍release版本,还是同样的问题。
我在编译osgPlugin ephemeris时直接用osgEphemeris曾遇到过“无法解析一个updatecall函数的错误”, 我是将EphemerisUpdateCallback的头文件和执行文件直接放到plugin项目下才编译通过的,不知会不会是这个原因?
版主是在windows平台下吗?ephemeris的开发网站提到其未在windows下做过测试
版主的ephemeris文件是从osg svn上下的吗?还有没有编好的或是源文件能传给我呢?

该用户从未签到

发表于 2009-9-18 10:53:13 | 显示全部楼层
我是在Windows下用的SVN版本,直接使用VC7的工程生成的EXE和DLL文件,然后按照说明编写一个简单的OSG文件作了实验,内容为:

  1. osgEphemerisModel::EphemerisModel {
  2.         UniqueID EphemerisModel_0

  3.         Latitude 38.4765
  4.         Longitude -122.493
  5.         SkyDomeRadius 3844030
  6.         MoveWithEyePoint TRUE
  7.     }
复制代码
可以看到结果。不过我没有作更进一步的实验;我个人不是很满意osgEphemeris的效果

该用户从未签到

 楼主| 发表于 2009-9-18 16:20:42 | 显示全部楼层
4# array

看来我们两的版本差别比较大,我的里面已经没有osgEphemerisModel这个作用域了
我也是想先看看效果,无奈出不了效果~

该用户从未签到

发表于 2009-10-4 16:17:41 | 显示全部楼层
你好!很高心看到你的贴关于osgEphemeris. 我也从osgsvn上下载了源码,编译osgplugins也出现了相同的链接错误,我曾采用过将Ephemeris头文件、lib和dll文件考到工程下,但是还是出现同样的错误,不知道你是否已经解决,请给我给些建议,谢谢

该用户从未签到

 楼主| 发表于 2009-10-6 09:36:38 | 显示全部楼层
6# superlau
我是将EphemerisUpdateCallback的头文件和实现文件放在Plugins osgephemeris工程里才编译成功的,但在自己的应用程序中仍然不能使用,你可以试下,要是成功了记得告诉我一声~

该用户从未签到

发表于 2009-10-9 17:41:55 | 显示全部楼层
本帖最后由 zealotsparc 于 2009-10-9 17:43 编辑

3# utopia

又编了一遍release版本,还是同样的问题。
我在编译osgPlugin ephemeris时直接用osgEphemeris曾遇到过“无法解析一个updatecall函数的错误”, 我是将EphemerisUpdateCallback的头文件和执行文件直接放到plugin ...
utopia 发表于 2009-9-18 10:35


我在编译osgEphemeris plugin的时候也遇到这个错误。起初我认为是没有正确配置osgEphemeris.lib的路径,后来发现在osgEphemeris中根本没有导出EphemerisUpdateCallbackRegistry类,
修改方法是找到osgEphemeris源码中的EphemerisUpdateCallbackRegistry类声明处,然后前面加上OSGEPHEMERIS_EXPORT,重新编译就OK了

该用户从未签到

发表于 2009-10-9 17:49:05 | 显示全部楼层
还有一个问题,osgEphemeris正确编译成功了,但是下面的程序编译成功,但是执行没有看到任何效果。
有编译过osgEphemeris的指导一下撒?谢谢先
---------------------------------------
#include <osgDB/ReadFile>
#include <osgViewer/Viewer>
#include <osgEphemeris/EphemerisModel>

#pragma comment(lib,"osg.lib")
#pragma comment(lib,"osgDB.lib")
#pragma comment(lib,"osgEphemeris.lib")


int main()
{

    osgViewer::Viewer viewer;
    osg::ref_ptr<osg::Group> root = new osg::Group;
    osg::ref_ptr<osg::Node> model = osgDB::readNodeFiles(args);
    if( model.valid() )
        root->addChild( model.get() );

    // Define the Ephemeris Model and its radius
    osg::BoundingSphere bs = model->getBound();
    osg::ref_ptr<osgEphemeris::EphemerisModel> ephemerisModel = new osgEphemeris::EphemerisModel;
    ephemerisModel->setSkyDomeRadius( bs.radius()*2 );
    ephemerisModel->setSkyDomeCenter( bs.center() );

    // Optionally, Set the AutoDate and Time to false so we can control it with the GUI
    //ephemerisModel->setAutoDateTime( false );

    // Optionally, uncomment this if you want to move the Skydome, Moon, Planets and StarField with the mouse
    //ephemerisModel->setMoveWithEyePoint(false);

    root->addChild( ephemerisModel.get() );
    // set the scene to render
    viewer.setSceneData(root.get());

    return viewer.run();
   
}
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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