查看: 988|回复: 3

关于绘制回调中自定义操作的条件处理

[复制链接]

该用户从未签到

发表于 2015-1-26 14:53:37 | 显示全部楼层 |阅读模式
本帖最后由 osgxch 于 2015-1-26 14:55 编辑

我的意愿是:当视点发生变化的时候,再执行自定义处理
class MyCameraPostDrawCallback : public osg::Camera:rawCallback
{
public:
        MyCameraPostDrawCallback(osg::Image* depth, osg::Image* color,osgViewer::Viewer* viewer) :
                _depth(depth),
                _color(color),
                _viewer(viewer)
        {
        }
        virtual void operator () (const osg::Camera & cam) const
        {
                _viewer->getCamera()->getViewMatrixAsLookAt(_eye_new, _center_new, _up_new);
                if(isViewMatrixAsLookAtChange(eye_new, center_new,eye_old, center_old);)
                  {
                        //
                        do something when ViewMatrixAsLookAt is changed

                        _eye_old=_eye_new;
                        _center_old=_center_old;
                  }
        }

        osg::Image*                     _depth;
        osg::Image*                     _color;

        osgViewer::Viewer*             _viewer;
        osg::Vec3f                      _eye_new;
        osg::Vec3f                      _center_new;
        osg::Vec3f                      _up_new;

        osg::Vec3f                      _eye_old;
        osg::Vec3f                      _center_old;
};

报错
错误        1        error C2664: “void osg::Camera::getViewMatrixAsLookAt(osg::Vec3f &,osg::Vec3f &,osg::Vec3f &,float) const”: 无法将参数 1 从“const osg::Vec3f”转换为“osg::Vec3d &”        c:\users\vgp\desktop\mytreemodeling\imagematriculated\myclasses.h        78        1        ImageMatriculated

该用户从未签到

 楼主| 发表于 2015-1-26 14:54:31 | 显示全部楼层
小弟求路过的大神指导下

该用户从未签到

发表于 2015-1-26 15:51:47 | 显示全部楼层
virtual void operator () (const osg::Camera & cam) const
最后的 const 规定这是一个常成员函数,不能修改成员变量。所以自动把osg::Vec3f的_eye_new转换成了const osg::Vec3f。解决办法是定义变量时改成:
        mutable osg::Vec3f                      _eye_new;
        mutable osg::Vec3f                      _center_new;
        mutable osg::Vec3f                      _up_new;

该用户从未签到

 楼主| 发表于 2015-1-27 12:24:22 | 显示全部楼层
OsgFly 发表于 2015-1-26 15:51
virtual void operator () (const osg::Camera & cam) const
最后的 const 规定这是一个常成员函数,不能 ...

谢谢你,那我那样做的想法对不对“在operator中判断视点变化再做处理”
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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