粒子发射器
-
粒子发射器实现思路
粒子发射器
使用粒子发射器
使用粒子发射器- 示例代码
- 设置Context
self.mContext = [[EAGLContext alloc] initWithAPI:(kEAGLRenderingAPIOpenGLES3)];
[EAGLContext setCurrentContext:self.mContext];
GLKView *view = (GLKView *)self.view;
view.context = self.mContext;
view.drawableColorFormat = GLKViewDrawableColorFormatRGBA8888;
view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
[EAGLContext setCurrentContext:self.mContext];
- 加载纹理
NSString *path = [[NSBundle bundleForClass:[self class]]
pathForResource:@"ball" ofType:@"png"];
if (path == nil) {
NSLog(@"ball texture image not found");
return;
}
self.ballParticleTexture = [GLKTextureLoader textureWithContentsOfFile:path options:nil error:nil];
self.particleEffect = [[XYPointParticleEffect alloc] init];
self.particleEffect.texture2d0.name = self.ballParticleTexture.name;
self.particleEffect.texture2d0.target = self.ballParticleTexture.target;
- 设置渲染格式
// 开启深度测试
glEnable(GL_DEPTH_TEST);
// 开启混合
glEnable(GL_BLEND);
// 设置混合模式
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
- 设置添加粒子参数
void(^block)() = ^{
self.autoSpawnDelta = 0.5f;
//重力
self.particleEffect.gravity = GLKVector3Make(0.0f, 0.0f, 0.0f);
int n = 100;
for(int i = 0; i < n; i++)
{
//X,Y,Z速度
float randomXVelocity = -0.5f + 1.0f * (float)random() / (float)RAND_MAX;
float randomYVelocity = -0.5f + 1.0f * (float)random() / (float)RAND_MAX;
float randomZVelocity = -0.5f + 1.0f * (float)random() / (float)RAND_MAX;
//创建粒子
[self.particleEffect
addParticleAtPosition:GLKVector3Make(0.0f, 0.0f, 0.0f)
velocity:GLKVector3Make(
randomXVelocity,
randomYVelocity,
randomZVelocity)
force:GLKVector3Make(0.0f, 0.0f, 0.0f)
size:4.0f
lifeSpanSeconds:3.2f
fadeDurationSeconds:0.5f];
}
};
- 更新
- (void)update {
NSTimeInterval timeElapsed = self.timeSinceFirstResume;
self.particleEffect.elapsedSeconds = timeElapsed;
if (self.autoSpawnDelta < (timeElapsed - self.lastSpawnTime)) {
self.lastSpawnTime = timeElapsed;
//执行block
block();
}
}
- 绘制
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
glClearColor(0.3, 0.3, 0.3, 1);
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT);
//准备绘制
[self.particleEffect prepareToDraw];
//绘制
[self.particleEffect draw];
}
网友评论