查看: 563|回复: 0

谁能解释下

[复制链接]

该用户从未签到

发表于 2015-12-15 18:05:56 | 显示全部楼层 |阅读模式
#include <osgViewer/Viewer>
#include <osg/Group>
#include <osg/ref_ptr>
#include <osg/Geode>
#include <osg/Geometry>
#include <osg/Array>
#include <osg/NodeCallback>
#include <osgGA/FirstPersonManipulator>
#include <osg/Drawable>
#include <osgdb/ReadFile>


FILE * fp;

class xxCallback : public osg::NodeCallback
{
public:
        xxCallback(osgViewer::Viewer * v)
        {
                viewer = v;
        }
        virtual void operator()(osg::Node* node, osg::NodeVisitor* nv)
        {
                osg::Vec3d eye,center,up;
                viewer->getCamera()->getViewMatrixAsLookAt(eye,center,up);
                fprintf(fp,"update      %f,%f,%f  %f,%f,%f  %f,%f,%f\n",eye.x(),eye.y(),eye.z(),center.x(),center.y(),center.z(),up.x(),up.y(),up.z());
                traverse(node,nv);
        }
private:
        osgViewer::Viewer * viewer;
};

int main()
{
        osgViewer::Viewer viewer;
        osg::Group * root = new osg::Group();
        root->addChild(osgDB::readNodeFile("c:/osg_data/cow.osg"));
        root->setUpdateCallback(new xxCallback(&viewer));
        viewer.setCameraManipulator(new osgGA::FirstPersonManipulator());
        viewer.setSceneData( root );

        fp = fopen("G:\\1.txt","wt");
        while(!viewer.done())
        {
                viewer.frame();
                osg::Vec3d eye,center,up;
                viewer.getCamera()->getViewMatrixAsLookAt(eye,center,up);
                fprintf(fp,"frame执行后 %f,%f,%f  %f,%f,%f  %f,%f,%f\n",eye.x(),eye.y(),eye.z(),center.x(),center.y(),center.z(),up.x(),up.y(),up.z());
        }
}

代码里两次打印视点参数,在移动鼠标的情况下,两次输出不一样。按理说不可能啊。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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