Radial Blur

From GameStudio Wiki

Jump to: navigation, search

This is some very cheap looking radial blur effect which doesn´t need a shader. Render to texture is needed and it is slower than the same effect would be with a shader. For some better looking radial blur without shader, check out Motion Blur

//////////////////////////////////////////////////
//////////Radial Blur Zoom without Shader/////////
//////////////////////////////////////////////////
////11.08.2008////////////////by Nils Daumann/////
/////////////slindev.wordpress.com////////////////
//////////////////////////////////////////////////

BMAP* WS_RadialBlur_bmap;
PANEL** WS_RadialBlur_panels;
var WS_RadialBlur_steps;


void WS_RadialBlur_SetValues(var xPosition, var yPosition, var distance)
{
	var n;
	for(n = 0; n < WS_RadialBlur_steps; n++)
	{
		WS_RadialBlur_panels[n].scale_x = 1+n*distance;
		WS_RadialBlur_panels[n].scale_y = 1+n*distance;
		WS_RadialBlur_panels[n].pos_x = -n*distance*screen_size.x*0.5;
		WS_RadialBlur_panels[n].pos_y = -n*distance*screen_size.y*0.5;
		WS_RadialBlur_panels[n].pos_x += screen_size.x*xPosition-screen_size.x*0.5;
		WS_RadialBlur_panels[n].pos_y += screen_size.y*yPosition-screen_size.y*0.5;
	}
}

//starts the radial blur
void WS_RadialBlur_init(VIEW* view, var steps, var xPosition, var yPosition, var distance)
{
	WS_RadialBlur_steps = steps;
	
	var n;
	WS_RadialBlur_bmap = bmap_createblack(screen_size.x,screen_size.y,24);
	WS_RadialBlur_panels = malloc(sizeof(PANEL*)*steps);
	
	for(n = 0; n < steps; n++)
	{
		WS_RadialBlur_panels[n] = pan_create("",n);
		WS_RadialBlur_panels[n].bmap = WS_RadialBlur_bmap;
		set(WS_RadialBlur_panels[n],VISIBLE|TRANSLUCENT);
		WS_RadialBlur_panels[n].alpha = 100/steps;
	}
	
	WS_RadialBlur_SetValues(xPosition,yPosition,distance);
	
	view.bmap = WS_RadialBlur_bmap;
}

//removes the effect
void WS_RadialBlur_remove(VIEW* view)
{
	view.bmap = 0;
	ptr_remove(WS_RadialBlur_bmap);
	var n;
	for(n = 0; n < WS_RadialBlur_steps; n++)
	{
		ptr_remove(WS_RadialBlur_panels[n]);
	}
}

This is an example on how to use it for radial blur:

//activate the effect
WS_RadialBlur_init(camera,20,0.5,0.5,0.0);

var i = 0;
while(i < 5)
{
	i += time_step;
	WS_RadialBlur_SetValues(0.5,0.5,i*0.1);
	wait(1);
}

while(i > 0)
{
	i -= 0.5*time_step;
	WS_RadialBlur_SetValues(0.5,0.5,i*0.1);
	wait(1);
}

//deactivate the effect
WS_RadialBlur_remove(camera);

--Slin 12:58, 12 August 2008 (CEST)

Personal tools