查看: 856|回复: 4

获取模型帧动画的顶点数据

[复制链接]

该用户从未签到

发表于 2016-4-12 09:49:42 | 显示全部楼层 |阅读模式
播放max导出的fbx骨骼关键帧动画! 现在我想获取动画每播放一次的模型顶点数据? 求助各位版主及大神们,目前没有方案,我只能通过节点访问器获取模型初始位置的顶点数据。
(动画是参考的osganimationviewer的示例)

该用户从未签到

 楼主| 发表于 2016-5-27 09:58:12 | 显示全部楼层
已搞定,完结!有需要的继续加帖。

该用户从未签到

发表于 2016-5-31 13:53:30 | 显示全部楼层
请给个Hint呗。

该用户从未签到

 楼主| 发表于 2016-6-3 14:59:02 | 显示全部楼层
        class TD_UpdateRigGeometry : public osg:rawable::UpdateCallback
        {
        public:
                TD_UpdateRigGeometry();
                TD_UpdateRigGeometry(const TD_UpdateRigGeometry&, const osg::CopyOp&);

                META_Object(osgAnimation, TD_UpdateRigGeometry);

                virtual void update(osg::NodeVisitor*, osg::Drawable* drw);
        };

    class NodeTriangleMeshVistor:public osg::NodeVisitor
    {
    public:
        NodeTriangleMeshVistor();
        ~NodeTriangleMeshVistor();
    public:
        virtual void apply(osg::Node& node);
        virtual void apply(osg::Geometry& geometry);
}

这里重写update的时候参考源码UpdateRigGeometry结构体中实现的update,copy过来就行,因为播动画的时候必须要调用geometry->update()来更新几何体的数据,否则显示不正确,所以我就重写了update,在开头直接获取顶点数据即可,如下:
        osg::Geometry *testGeom = dynamic_cast<osg::Geometry*>(drw);
        if (testGeom){
                CDApp::TriangleMeshPtr pMesh(new CDApp::TriangleMesh);
                TD_getGeometryVertexs(testGeom, pMesh);
                TD_gMeshList = pMesh;
        }
这个需要自己加到update里面去。

该用户从未签到

 楼主| 发表于 2016-6-3 15:00:22 | 显示全部楼层
TD_getGeometryVertexs 这个函数,就是根据你自己的方式去构造Mesh了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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