Hmm, there was once a thread of a guy that developed a quite simple Heat post-screen effect...
Ah! here it is, was searching on my HD. Just copy and paste this s*** and see if that's what you're looking for:
@Ross C: Boy you are sure advertising the hell out of fastlibs throughout the forums! are you getting something for it?...
Ah! here it is, was searching on my HD. Just copy and paste this s*** and see if that's what you're looking for:
;----- Heat Distortion Effect by Roland Ludlam ------ ;----- web: <a href="http://www.sover.net/~ardeo" target="_blank">http://www.sover.net/~ardeo</a> ------ ;----- e-mail ardeo@... ------ ;----- I'm new to blitz and coding in general ------ ;----- So forgive my messy code! any comments ------ ;----- or suggestions for optimization or ------ ;----- other solutions are welcome! ------ ;----- ------ ;----- thanks! roland ------ ;---------------------------------------------------- Graphics3D 640,480,0 SeedRnd MilliSecs() ;----- create main scene camera ------ Global cam = CreateCamera() CameraProjMode cam,1 CameraRange cam,.01,1000 PositionEntity cam,0,10,-20 ;----- create effect camera ------ Global cam2 = CreateCamera() PositionEntity cam2,0,10,-20 CameraViewport cam2,0,0,256,256 CameraProjMode cam2,0 CameraRange cam2,.01,1000 l=CreateLight() ;----- texture globals ------ Global texmove#=0 Global angle# = 0 Global angle2# = 0 Global texscale#=.978999 Global texscaley# =1.041 Global texx#=.0109977 Global texy#=-.023003 ;----- globals to control the distortion effect ------ Global distamount# = 1 Global distalpha# = 1 ;----- sin or random distortion? set to 1 for sin and 0 for random ------ Global sinewave = 1 ;----- create blank texture to use later ------ Global imagetex = CreateTexture(256,256,256) ;----- load up or lava textures ------ Global lavatex = LoadTexture("lava.bmp") ScaleTexture lavatex,300,300 Global explosion = LoadTexture("lava3.tga",1) ScaleTexture explosion,500,500 ;----- initialize types: vert is for displacement / distortion ------ Type vert Field x# Field y# Field z# Field num Field a# Field distance# End Type Type box Field entity End Type ;----- load textures onto planes (just for fun) ------ Global plane = CreatePlane() PositionEntity plane,0,-5,0 EntityTexture plane,lavatex EntityFX plane,1 Global plane2 = CreatePlane() EntityBlend plane2,3 EntityTexture plane2,explosion EntityFX plane2,1 ;----- load mesh to use as distortion sprite ------ Global dist = LoadMesh("plane.x",cam2) PositionEntity dist,0,0,.1 ScaleEntity dist,.0256,.0256,.0256 RotateEntity dist,90,0,0 EntityFX dist,1 EntityTexture dist,imagetex Global distsurf = GetSurface(dist,1) Global vnum = CountVertices(distsurf) ;----- scale texture to match sprite... ------ ScaleTexture imagetex,texscale,texscaley PositionTexture imagetex,texx,texy ;----- convert vertices to types for easy access ------ For a=0 To vnum-1 v.vert = New vert v\num = Int(a) v\x = VertexX#(distsurf,a) v\y = VertexY#(distsurf,a) v\z = VertexZ#(distsurf,a) v\a = Rnd(0,360) Next ;----- place some boxes to show off effect better ------ For i=0 To 10 b.box = New box b\entity = CreateCube() PositionEntity b\entity,Rnd(-20,20),Rnd(0,20),Rnd(-20,20) Next ;----- main loop ------ While Not KeyHit(1) ;----- make the boxes move ------ For b.box = Each box TurnEntity b\entity,1,1,1 Next ;----- call heatdist function ------ heatdist() ;----- make the textures on the planes move ------ texturemove() ;----- keys to change the effect if you want to. ------ If KeyHit(2) Then sinewave = 1 If KeyHit(3) Then sinewave = 0 If KeyHit(4) Then sinewave = 2 If KeyDown(200) Then distamount = distamount+.025 If KeyDown(208) Then distamount = distamount-.025 If KeyDown(203) Then distalpha = distalpha-.01 If KeyDown(205) Then distalpha = distalpha+.01 If distalpha <=0 Then distalpha = 0 UpdateWorld RenderWorld Text 0,0,"1 / 2 toggle sine / random" Text 0,12,"up and dn +/- distortion" Text 0,24,"lft and rt +/- effect alpha" Flip True Wend ;----- heat distortion function ------ Function heatdist() ;----- first we render the screen to texture. change the alpha of dist for more / less blur ------ EntityAlpha dist,.8*distalpha CameraProjMode cam,0 CameraProjMode cam2,1 RenderWorld CopyRect 0,0,256,256,0,0,BackBuffer,TextureBuffer(imagetex) ;----- then switch back to regular camera and modify vertices for distortion effect. ------ CameraProjMode cam2,0 CameraProjMode cam,1 ShowEntity dist EntityAlpha dist,.6*distalpha For v.vert = Each vert v\a=v\a+5 If v\a>=360 Then v\a = 0 ;----- displace vertices. use sine or straight up random distortion? ------ If sinewave = 0 Then VertexCoords(distsurf,v\num,v\x,v\y,v\z+(Rnd(-.08*distamount,.08*distamount))) If sinewave = 1 Then VertexCoords(distsurf,v\num,v\x,v\y,v\z+((Sin(v\a)/(30/distamount)))) If sinewave = 2 Then VertexCoords(distsurf,v\num,v\x+((Sin(v\a)/(30/distamount))),v\y,v\z) Next End Function ;----- moves the textures on the ground planes. just for show. ------ Function texturemove() angle = angle+.5 If angle >=360 Then angle = 0 angle2 = angle2+.1 If angle2 >=360 Then angle2 = 0 PositionTexture lavatex,(Sin(angle)/5),0 RotateTexture lavatex,angle2 texmove = texmove+.001 PositionTexture explosion,texmove,0 End Function End
@Ross C: Boy you are sure advertising the hell out of fastlibs throughout the forums! are you getting something for it?...