Radial Blur
From GameStudio Wiki
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)
