zoukankan      html  css  js  c++  java
  • [原][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中的转换了

  • 相关阅读:
    Spark ListenerBus 和 MetricsSystem 体系分析
    Scala使用JUnit4单元测试
    Error:java: Compilation failed: internal java compiler error
    Spark 2.2 DataFrame的一些算子操作
    Spark SQL中UDF和UDAF
    Scala基础
    Spark Sql的UDF和UDAF函数
    Kafka笔记整理(二):Kafka Java API使用
    Kafka笔记整理(一)
    【口语英语】小学英语1-6年级听力必备知识汇总,建议收藏!
  • 原文地址:https://www.cnblogs.com/lyggqm/p/6872225.html
Copyright © 2011-2022 走看看