|
本人现在想实现在一个FBX模型的手节点放置火焰的粒子团,所以能够把粒子团的MatrixTransform定位到手节点的Matrix上。
据本人所知,osg::ComputeLocalToWorld可以实现从模型坐标到世界坐标的转换。以下是本人的代码。
- class INodeVisitor: public osg::NodeVisitor
- {
- public:
- std::string name;
- osg::ref_ptr<osg::Matrix> mas;
- INodeVisitor():osg::NodeVisitor(osg::NodeVisitor::TRAVERSE_ALL_CHILDREN){ }
- void setNodeName(std::string _name){
- name = _name;
- mas = new osg::Matrix();
- }
- osg::Matrix* getWorldMatrix(){
- return mas.get();
- }
- void apply(osg::Node& node){
- // std::cout<<node.getName()<<std::endl;
- if (node.getName() == name)
- *mas = osg::computeLocalToWorld(getNodePath());
-
- traverse(node);
- }
- };
复制代码 我通过传递name = "LefthandRope1"字符串到类里面,根据手节点的NodePath来计算出世界坐标矩阵。不知道写的正不正确,呵呵。希望大家指定。
现在问题来了。那我怎么把我的火焰例子团定位呢。我查找到函数osg::computeWorldToLocal(const osg::NodePath& NodePath)貌似可以帮我的忙。
但是我们发现他传递进去的参数是osg::NodePath而不是osg::Matrix.我想这样我们是无法计算出他的模型坐标的吧。请问大家
都是怎么做的呢。我的想法是不是错了呢?请大家指正。
|
|