アルゴリズムは知りつつ、今までやったことなかったので。
この残像のアルゴリズムは非常に単純です。動くオブジェクトが、一定時間ごとに残像オブジェクトを発生させることで残像に見せています*1。glView->zanzouが残像タスクのリストで、こいつはNSMutableArrayを使っています*2。
-(void)process{ /* オブジェクトを動かす処理(略) */ if(count % 2 == 0){ //残像を追加 Zanzou *z = [[Zanzou alloc] initView:glView X:x Y:y Deg:deg]; [glView->zanzou addObject: z]; [z release]; } }
残像オブジェクトは、生成された位置(x, y)と角度(deg)のまま居座るオブジェクトです。時間経過と共に色が薄くなり、一定時間で消滅します。
-(void)process{ count--; if(count <= 0){ /* 時間が経ったら消滅 */ [glView->zanzou removeObject: self]; } } -(void)draw{ /* 色の計算。時間とともに薄く(黒く)なる */ GLfloat color = 1.0f / 20.0f * count; glColor4f(0, 0, color, 1.0f); /* この色で、対象オブジェクトと同じ形状を描写(略) */ }
なお、このサンプルのオブジェクトの形状はごにいさんのtekitostrikerからお借りしました(ぇぇぇ。