Pixel Pedals of Tomakomai

北海道苫小牧市出身の初老の日常

残像を実装してみました

アルゴリズムは知りつつ、今までやったことなかったので。

この残像のアルゴリズムは非常に単純です。動くオブジェクトが、一定時間ごとに残像オブジェクトを発生させることで残像に見せています*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からお借りしました(ぇぇぇ。

*1:青いオブジェクトの一つ一つが残像オブジェクト

*2:今は速度気にしてないのでお手軽なのを選択。実用的には循環リストの方がいいと思います。