查看: 2322|回复: 4

获取坐标

[复制链接]

该用户从未签到

发表于 2009-3-4 12:05:23 | 显示全部楼层 |阅读模式
获取当前视点坐标:
osg::Vec3 ViewPositon;
osg::Vec3 center ;
osg::Vec3 up ;
while(!viewer->done())
{
        osg->PreFrameUpdate();
        viewer ->getCamera() ->getViewMatrixAsLookAt(ViewPositon, center, up) ;
        viewer->frame();
        osg->PostFrameUpdate();

}
报错:
error C2597: illegal reference to non-static member 'CCoreOSG::ViewPositon'
error C2597: illegal reference to non-static member 'CCoreOSG::center'
error C2597: illegal reference to non-static member 'CCoreOSG::up'

把那三个变量前面加上static,链接的时候又报错。
error LNK2001: unresolved external symbol "public: static class osg::Vec3f C**::up

不知道是跟线程有关系吗?还是什么原因,望各位高手指教.谢谢~~

该用户从未签到

发表于 2009-3-4 12:19:30 | 显示全部楼层
ViewPositon,up,center这三个变量是CCoreOSG类的成员还是局部变量?
它们在您提供的代码中的声明位置似乎和C2597报错的指示信息矛盾啊?
也许是别的原因,或者您可以提供更多的代码让大家帮您分析?

该用户从未签到

 楼主| 发表于 2009-3-4 12:31:58 | 显示全部楼层
原帖由 array 于 2009-3-4 12:19 发表
ViewPositon,up,center这三个变量是CCoreOSG类的成员还是局部变量?
它们在您提供的代码中的声明位置似乎和C2597报错的指示信息矛盾啊?
也许是别的原因,或者您可以提供更多的代码让大家帮您分析?

ViewPositon,up,center这三个变量是CCoreOSG类的成员变量.
看过MSDNC2597可能出错原因:
1、在静态成员函数中指定了非静态成员。若要访问非静态成员,则必须创建该类的实例,并使用成员访 问运算符(. 或 ->)。

2、指定的标识符不是类、结构或联合的成员。

3、成员访问运算符引用非成员函数。
我的这三个变量声明是在CCoreOSG.h文件class CCoreOSG里面声明的,在CCoreOSG.cpp文件中CCoreOSG::render()中调用。
所以不知道是什么原因.....谢谢了

该用户从未签到

发表于 2009-3-4 13:06:12 | 显示全部楼层
那么,您的render函数是static静态函数喽?这样的话是不能在其中使用非静态的成员变量的。可以将viewPosition,up和center作为全局变量使用;或者将类的实例指针传入静态函数,再使用其中的公有方法

该用户从未签到

 楼主| 发表于 2009-3-4 13:47:41 | 显示全部楼层
已解决,谢谢array~~
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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