[原][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中的轉換了


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM