查看: 1309|回复: 4

求助,如何改变喷泉的发射方向,可以沿着任何方向喷

[复制链接]

该用户从未签到

发表于 2010-9-8 16:38:23 | 显示全部楼层 |阅读模式
在喷泉模拟程序中
头文件Conduit .h
class
Conduit
{
public:

Conduit(
void);

~Conduit(
void);

osgParticle:articleSystem * CreateConduitScene(osg::Group* root);
     float m_fTheNum;
     float m_fTheSize;
     float m_fTheSpeech;//速度

osg::Node * CreateConduit(osg::Group * root);

osg::Vec3 m_VecPosition;
};
在counduit源代码中
#include "Conduit .h"
//**********************************
Conduit::Conduit(void):
m_fTheNum(150),
m_fTheSize(0.1)
,m_fTheSpeech(110)//这里面变量只有一个就是向上(或向下)发射的粒子系统


如何让喷泉除了向上(向下)喷之外,可以向前后左右喷。就是以任意的角度发射粒子系统。
请各位高手指点。万分感谢! :handshake

该用户从未签到

发表于 2010-9-8 17:13:46 | 显示全部楼层
使用osgParticle:: RadialShooter,并设置合适的角度和速度

另一种方法是对Emitter设置Transform父节点

该用户从未签到

 楼主| 发表于 2010-9-8 20:30:23 | 显示全部楼层
谢谢array ,明白点了!
使用osgParticle:: RadialShooter,并设置合适的角度和速度

另一种方法是对Emitter设置Transform父节点


第一种方法只是调节粒子系统辐射的形状和角度
shooter->setThetaRange(0.0 , 3.14159/4); // 弧度值,与Z轴夹角。
它是与整个z轴成45度角(x,y轴全部辐射到了),如何实现只向y轴的正方向发射粒子系统。

第二种方法,还在学习中。

该用户从未签到

发表于 2010-9-9 08:29:44 | 显示全部楼层
RadialShooter设置速度初值的公式是这样的:
  1. setVelocity(k * sin(theta) * cos(phi), k * sin(theta) * sin(phi), cos(theta))
复制代码
其中theta和phi分别随机取自setThetaRange()和setPhiRange()设置的范围内,因此,要仅仅向Y轴正向发射的话,可以设置setThetaRange(PI_2, PI_2),以及setPhiRange(PI_2, PI_2),或者您可以设置一定的随机范围来得到更丰富的效果

第二种方法其实要简单许多,只要父节点的setMatrix是一个旋转值就可以了

该用户从未签到

 楼主| 发表于 2010-9-11 11:12:35 | 显示全部楼层
谢谢!array,第一种方法已经完全懂了,第二种方法还在研究中
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

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

联系我们

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