CG仿真及3D特效编程教程(三)| 粒子特效系统

回顾

上一期分享中,给大家介绍了运动学基础及代码实现了正向运动学如何模拟实现,内容相信对大家来说有些枯燥乏味,但是这就是3D编程,复杂特效的基础,比如逆向运动学被广泛用在模型IK操作中,还是希望如果对这块感兴趣的开发者小伙伴能够有些帮助。

这一期讲会给大家讲述粒子系统,这一章会比较简单易懂,也没有非常复杂的内容。

粒子系统表示3D计算机图形学中模拟一些特定的现象的技术,而这些现象用其它传统的渲染技术难以实现真实感的物理运动规律。经常使用粒子系统模拟的现象有火、爆炸、烟、水流、火花、落叶、云、雾、雪、尘、流星尾迹或者象发光轨迹这样的抽象视觉效果等,甚至还有毛发。

粒子系统生命周期主要是从随机粒子构造器到粒子发射器,到渲染,更新再渲染,以此往复。

发射器会定义每个粒子的创建时间、销毁时间、初始位置、初始速度、初始颜色、初始透明度、初始大小等信息。

通过以下代码实现为发射器创建随机值:

#include <stdlib.h>
float
Ranf( float low, float high )
{
float r = (float) rand( );                // 0 - RAND_MAX
float t = r / (float) RAND_MAX;         // 0. – 1.
return low + t * ( high - low );
}

int
Ranf( int ilow, int ihigh )
{
float low = (float) ilow;
float high = ceil( (float) ihigh );
return (int) Ranf(low,high);
}

到渲染显示的时候方法就很多了,从最简单的point,例如:

glBegin( GL_POINTS );
glColor3f( r0, g0, b0 );
glVertex3f( x0, y0, z0 );
. . . glEnd( );

到Vertex Buffer Objects方式都可以进行display。

下面是不同绘制物体显示出的粒子:

接下来就给大家看下用代码生成的粒子系统的一些例子,本期就不做过多介绍内容,相关示例代码可以关注后留言。

点和轨迹形成的粒子系统:

100百万不同色彩的粒子系统,通过shader实现:

关于用shader其实就是使用的GPU资源,也就是所谓的基于GPU的粒子,对于大量的顶点或者变换还是GPU更节省资源,充分发挥GPU的性能,感兴趣的可以详细了解下。

本期最后给大家介绍下我们虹图美颜SDK、3D Avatar SDK已经在接口中加入了开发者自选CPU或GPU计算的功能,开发者能够更加贴合自己平台用户的硬件情况自适应性能,将极致精致、又流畅的效果呈现给用户。

在接下来的一章中,我们将介绍关于功能性动效(Functional Animation),物理碰撞(Collision Physics),碰撞检测(Collision Detection)等方面的内容,敬请期待~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

虹图AI开放平台

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值