玩玩Leap Motion和粒子效果

本文介绍了如何利用Leap Motion控制器创建手指控制的粒子效果。通过理解牛顿力学,定义粒子类并结合柏林噪声干扰粒子运动,实现了精细的手指操控。在实现过程中,详细解释了粒子系统的设计,并展示了如何集成Leap Motion SDK,让程序可以识别和响应手指位置。最后展示了成果并提供下载链接。
摘要由CSDN通过智能技术生成

终于拿到期待已久的Leap Motion了,600多软妹币,比Kinect for Windows便宜多了!先洒一个图。



刚拿到就有写程序的冲动,Leap Motion可以精确定位人的手指,因此打算写一个用手指控制的粒子效果,下面一步一步来。


一、粒子系统

常有人问,初中高中学的那些物理有什么用?我现在知道了,那些物理知识可以用来写粒子效果!而且只需要了解基本的牛顿力学即可(牛顿三定律)。

描述一个物体(粒子)的运动和状态,需要哪些物理量?物体的质量,物体的空间坐标,物体的速度还有物体的加速度。因此我们创建一个粒子类,这个类中必须包含这4个成员变量。

float	m_mass;
ofVec3f m_location;
ofVec3f	m_velocity;
ofVec3f m_acceleration;

粒子在运动过程中势必会受力,受力怎么表现呢?想必下面这个公式一定无人不知、无人不晓:


也就是说,受力是通过改变物体的加速度来表现的,因此我们写下如下一组方法:

void ApplyForce(ofVec3f force)
{
	m_acceleration += force/m_mass;
}

void ClearForce()
{
	m_acceleration = ofVec3f::zero();
}

加速度是指速度单位时间内的变化量,因此加速度会影响速度,同理速度是路程单位时间内的变化量,所以速度会影响路程(空间坐标)。我们将Openframeworks中的每一帧看做一个单位时间,因此每一帧都要对速度和空间坐标进行更新,具体实现如下:

void Particle2D::Update()
{
	m_velocity += m_acceleration;
	m_location += m_velocity;

	ClearForce();
}

每一帧调用完以上方法后,我们还要将这个粒子画出来,在这个粒子类中,我还包含了一个ofImage类型的变量,用于将一副图片画在屏幕上,这些都在Draw方法中完成:

void Particle2D::Draw()
{
	float h = m_image.height;
	float w = m_image.width;

	m_image.setAnchorPercent(0.5f, 0.5f);
	m_image.draw(m_location.x, m_location.y, w, h);

}

其中的setAnchorPercent方法的作用,是将图片的原点设置在图像中心处,这样在绘制图片时,图片的中心就会在我绘制的坐标处。当然,我们还需要一个方法来设置要绘制的图片,我将这一部分代码写在了粒子类的构造函数中:

Particle2D::Particle2D( ofImage& image, float mass, ofVec2f locat
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值