OpenGL ES粒子发生器

http://www.iphone-geek.cn/%E7%BC%96%E7%A8%8B/opengl-es%E7%B2%92%E5%AD%90%E5%8F%91%E7%94%9F%E5%99%A8

译者注:此代码虽然有这样那样的问题,但仍然值得参考。

我在360 iDev会议中汇总了粒子发生器的代码。由于我又要开始进行有收入的工作所以我必须将之处之高阁了,但我准备在这里分享给有兴趣者。

首先,我要说我并不是一个OpenGL的专家,我撰写此文能够帮助我更好地学习OpenGL 和粒子系统,所以可以肯定还有很多地方需要改进。

其次,此代码还有许多bug,并不适用于最终产品。最重要的一个bug是试图释放粒子时造成的死循环。粒子内存没有被释放,它不断被重用。有两个链 接表,一个用于保存可见的粒子,另一个保存不再可见的粒子。当一个粒子生存期到达时,它将被从一个列表移动到另一个。当需要一个新的粒子时,就从列表中提 取一个。此方法可以避免不断的内存分配和释放的开销 。但是,当粒子发射后,我需要一个选项来释放内存,现在它会造成死循环。

第三,示例程序将所有的发生器放入一个数组中。当你轻触屏幕时,当前发生器会停止发射,下一个发生器开始启动。当最后一个发生器结束时,第一个发生 器循环启动。此时,会遇到pthread锁竞争问题,两个线程会等待另一个线程,引起程序锁住。由于我并非手工建立线程,所以跟踪此问题可能有相当的难 度。

可在Google Code project 下载 。如果你不想使用subversion,你也可以直接下载zip文件Particles_03_06_2008 .

你可能感兴趣的:(OpenGL ES粒子发生器)