查看: 1689|回复: 5

粒子系统喷泉问题(急~)

[复制链接]

该用户从未签到

发表于 2012-4-28 09:49:52 | 显示全部楼层 |阅读模式
/*在gis鼠标点击一个地球上某处,得到维度mLat和经度mLon,
设定高度为50,利用系统函数createPlacerMatrix()将经度纬度高度转换成矩阵posMat*/

mObjectPlacer->createPlacerMatrix(mLat, mLon, 50, posMat);

/*设定变换矩阵*/
osg::ref_ptr<osg::MatrixTransform> matrix = new osg::MatrixTransform(posMat);

/*利用变换矩阵添加一个喷泉节点,并加入到场景当中,此时没有设定重力加速度和phi及theta角度,所以在场景中喷泉的方向是垂直于当地水平面向上,及沿着当地水平坐标系北东天坐标系的z轴向上。达到预定效果*/
matrix->addChild(od1.ReCreateConduitScene());
root->addChild(matrix);

未命名1.jpg 未命名.jpg
/*但是粒子系统需要添加重力加速度,所以重力加速度应该是沿着当地北东天坐标系的-z轴即(-x,-y,-z)方向,但是如果通过setToGravity()添加的重力加速度是沿世界坐标系的-z轴,所以我使用setAcceleration()进行添加重力加速度,三个参数分别是9.8乘以[(-x,-y,-z)的单位向量],代码如下:*/

/*得到粒子系统被添加的位置在世界坐标系当中的位置向量*/
double Position[3] = {0.0};
double x = posMat.getTrans().x();
double y = posMat.getTrans().y();                       
double z = posMat.getTrans().z();

Position[0] = -x;
Position[1] = -y;
Position[2] = -z;

/*将位置单位化*/
Unit(Position);

double pGravityValue[3] = {0.0};

进行三轴重力加速度赋值
{
       pGravityValue[0] = 9.8*Position[0];
       pGravityValue[1] = 9.8*Position[1];
       pGravityValue[2] = 9.8*Position[2];
}
setAcceleration(osg::Vec3d(p_pGravityValue[0],p_pGravityValue[1],p_pGravityValue[2]));
按理这个加速度应该是沿着北东天坐标系的-z轴,但是并不是,求高手解释~
非常感谢!!

该用户从未签到

 楼主| 发表于 2012-4-28 09:51:24 | 显示全部楼层
l粒子节点添加位置就是(mLat, mLon, 50)的位置,在地球上点击一处位置添加一个喷泉~

该用户从未签到

 楼主| 发表于 2012-4-28 09:51:30 | 显示全部楼层
l粒子节点添加位置就是(mLat, mLon, 50)的位置,在地球上点击一处位置添加一个喷泉~

该用户从未签到

发表于 2012-5-4 18:08:57 | 显示全部楼层
您需要注意Operator和Emitter的坐标系关系,两者是否在一个坐标系当中

该用户从未签到

 楼主| 发表于 2012-5-17 11:15:28 | 显示全部楼层
array 发表于 2012-5-4 18:08
您需要注意Operator和Emitter的坐标系关系,两者是否在一个坐标系当中

怎样看两者是否在一个坐标系。。。 怎样进行设定。。。。

该用户从未签到

发表于 2012-5-21 13:21:53 | 显示全部楼层
最简单的就是保证它们在同一个父节点之下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

OSG中国官方论坛-有您OSG在中国才更好

网站简介:osgChina是国内首个三维相关技术开源社区,旨在为国内更多的技术开发人员提供最前沿的技术资讯,为更多的三维从业者提供一个学习、交流的技术平台。

联系我们

  • 工作时间:09:00--18:00
  • 反馈邮箱:1315785073@qq.com
快速回复 返回顶部 返回列表