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中的转换了

  • 相关阅读:
    Three.js基础探寻六——文字形状与自定义形状
    Three.js基础探寻五——正二十面体、圆环面等
    Three.js基础探寻四——立方体、平面与球体
    Three.js基础探寻三——透视投影照相机
    Three.js基础探寻二——正交投影照相机
    Three.js基础探寻一
    js 基础 函数传值
    jQuery 判断页面元素是否存在的代码
    手机端点解链接有外框的问题
    团队博客冲刺第七天
  • 原文地址:https://www.cnblogs.com/lyggqm/p/6872225.html
Copyright © 2011-2022 走看看