[原][osg][osgEarth][粒子特效]关于粒子特效库在osgEarth中,位置摆放问题,跟踪节点移动问题

首先粒子在地球上位置摆放很简单:

//传入的经纬度坐标
osg::Vec3d geoPoint;

const SpatialReference* latLong = SpatialReference::get("wgs84");
//偏移在地球上的点
GeoPoint point(latLong, geoPoint.x(), geoPoint.y(), geoPoint.z(), eMode);
	
osg::Matrix matrixGood;
	
point.createLocalToWorld(matrixGood);
	
//添加了spark里的osg::MatrixTransform直接设置矩阵就OK了
pMatrix->setMatrix(matrixGood);

  

 

Spark粒子在跟踪节点移动时候,有两种方式:

  1. 被一个MatrixTransForm节点添加,直接移动MatrixTransForm节点

这时候会有一些效果出现问题,比如,粒子移动时,想要spark已经喷射出的粒子不随MatrixTransForm移动的话就不能够实现。

我们来分析:spark是作为一个可渲染叶节点osg::Drawable添加进osg中的,这是一个整体。所以当它的父节点移动时,它必然移动。

 

2.基于以上原因,我们要移动的就应该是spark的喷射器了,这一点在osgspark的例子中也给出了方式,将spark直接加入到一个不动的场景节点中,然后在每帧更新的时候更新spark中的喷射器位置。

         这个如果spark需要偏移不是特别远的时候也是可以使用的。

         但是在osgEarth中使用的话,由于偏移的精度原因(或其他不知道的原因)会造成spark粒子出现问题:喷出的粒子不做公告牌运算了···

 

结合以上方式,经过不断测试,我发现可以将spark节点添加进MatrixTransForm中,并只在初始化时偏移一次MatrixTransForm到地球表面上,然后需要移动时,再偏移spark的相对位置。。。这样出来的效果是最好的。

 

那么现在就是要不断做地球经纬度偏移在xyz中的转换了

posted @ 2017-05-18 10:51  南水之源  阅读(2853)  评论(0编辑  收藏  举报