[原][osg][osgEarth]osg::Matrix 父子节点的变化关系

 1 //osg::Matrix offsetmatrix 计算出子节点在父节点下的绝对坐标
 2 //osg::Matrix offposition 用来计算当前节点相对父节点的位置
 3 osg::Matrix offsetmatrix;
 4                 offsetmatrix.setTrans(newposition3);
 5                 offsetmatrix.preMultRotate(fatherquat);
 6                 offsetmatrix.preMultRotate(itr->_quatOffsetRotate);
 7 
 8                 osg::Matrix offposition;
 9                 offposition.setTrans(itr->_v3OffsetPosition);
10                 offposition.postMultRotate(fatherquat);
11                 offsetmatrix.postMultTranslate(offposition.getTrans());
12 
13 //此段代码每帧都调用来实现子节点跟随父节点运动,并实现相对偏移和旋转

直接上代码

我目前做的是spark粒子的喷射器跟随osgEarth上一个节点一起运动

并在父节点的基础上做相对偏移,用来做车尾尘,飞机尾焰等特效。

代码片段是写在

 SparkUpdatingHandler::handle中的

目的是更新spark喷射器的位置。

有几点要注意的:

1.spark的节点是挂在一个不动的节点下面的,不是挂在动的“父节点”(如飞机等)下面,然后更新spark的喷射器一直跟随“父节点”(飞机)。

2.由于在osgEarth中,“父节点”(飞机等)在空间的位置非常大,spark当前真正的父节点也是偏移在(飞机等节点)附近的。然后更新的位置是相对位置。

原文地址:https://www.cnblogs.com/lyggqm/p/6889224.html