回顾
上一期分享中,给大家介绍了运动学基础及代码实现了正向运动学如何模拟实现,内容相信对大家来说有些枯燥乏味,但是这就是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)等方面的内容,敬请期待~