Code archives/3D Graphics - Misc/Realtime Shadow
This code has been declared by its author to be Public Domain code.
Download source code
| |||||
Uses Renderworld to produce a Lightmap on the fly. | |||||
; One more Realtime Shadow by norc ; hack added by Peter Scheutz width=640 height=480 Graphics3D width,height,16,2 SetBuffer BackBuffer() flo=CreateCube() ScaleEntity flo,120,1,120 flotex=CreateTexture(128,128) SetBuffer TextureBuffer(flotex) For i=0 To 63 Color ((i*10)And $ff)*.8,(i*3)*.8,((i*20)And $ff)*.8 Rect 64-i,64-i,i+i,i+i,0 Next SetBuffer BackBuffer() ScaleTexture flotex,0.25,0.25 cube=CreateCube() ScaleEntity cube,30,5,50 TranslateEntity cube,-35,90,-15 EntityColor cube,255,0,0 Dim cubef(1000) Dim cubecolor(1000,3) canz=50 For i=0 To canz cubef(i)=CreateCube() ScaleEntity cubef(i),2,2,5 TranslateEntity cubef(i),Rand(-70,70),90+Rand(-20,20),Rand(-70,70) cubecolor(i,0)=255 cubecolor(i,1)=Rnd(255) cubecolor(i,2)=0 EntityColor cubef(i),cubecolor(i,0),cubecolor(i,1),cubecolor(i,2) RotateEntity cubef(i),Rand(360),Rand(360),Rand(360) Next cube2=CreateCube() ScaleEntity cube2,10,10,50 TranslateEntity cube2,35,90,15 EntityColor cube2,0,255,0 sphere=CreateSphere(3) ScaleEntity sphere,10,10,10 TranslateEntity sphere,50,50,50 EntityColor sphere,255,0,255 camera=CreateCamera() PositionEntity camera,0,100,200 PointEntity camera,flo light=CreateLight(2) PositionEntity light,0,500,0 mng=128 mng2=Int(mng/2) halfwidth=width/2 halfheight=height/2 sp_s=0 sp_e=127 grabx=halfwidth-mng2 graby=halfheight-mng2 Const stpx=1 Const stpz=1 ; the lightmap texture - it tries to use flag 256, some cards don't like it, but usually it gives a 400% speed boost limat=CreateTexture(mng,mng,256) HWMultiTex 0 ; might be faster if you turn this on ; that's for my machine EntityTexture flo,flotex,0,0 EntityTexture flo,limat,0,1 EntityBlend flo,1 shadowColor=100 While KeyDown(1)=0 ;----------------------------------------------------------------- ; Produce a Lightmap EntityAlpha flo,0 PositionEntity camera,0,180,0 ; Play with this Y-Value RotateEntity camera,90,0,0 CameraViewport camera,grabx,graby,mng,mng CameraZoom camera,1.2 ; and play with this Zoom-Value CameraClsColor camera ,255,255,255 For i=0 To canz EntityColor cubef(i),shadowColor,shadowColor,shadowColor EntityFX cubef(i),1 Next EntityColor sphere,shadowColor,shadowColor,shadowColor EntityColor cube,shadowColor,shadowColor,shadowColor EntityColor cube2,shadowColor,shadowColor,shadowColor EntityFX sphere,1 EntityFX cube,1 EntityFX cube2,1 RenderWorld() For i=0 To canz EntityColor cubef(i),cubecolor(i,0),cubecolor(i,1),cubecolor(i,2) EntityFX cubef(i),0 Next EntityColor sphere,255,0,255 EntityColor cube,255,0,0 EntityColor cube2,0,255,0 EntityFX sphere,0 EntityFX cube,0 EntityFX cube2,0 CameraZoom camera,1.0 EntityAlpha flo,1.0 CopyRect grabx,graby,128,128,0,0,BackBuffer(),TextureBuffer(limat) ;----------------------------------------------------------------- ; Render the Scene CameraClsColor camera ,0,0,0 CameraViewport camera,0,0,width,height camrot#=camrot#+1.0 If camrot#>360 Then camrot#=camrot#-360 camrot2#=camrot2#+3.0 If camrot2#>360 Then camrot2#=camrot2#-360 PositionEntity sphere,Cos(camrot2#)*80,50,Sin(camrot2#)*60 RotateEntity cube,camrot#,camrot#,camrot# RotateEntity cube2,360-camrot2#,camrot#,15 PositionEntity camera,Cos(camrot#)*200,50+MouseY()/3,Sin(camrot#)*200 PointEntity camera,flo UpdateWorld() RenderWorld() tt=MilliSecs() fps#=1000/(tt-ttold) ttold=tt Text 10,10,"FPS: "+Int(fps#) Flip False Wend End |
Comments
| ||
I must have a pretty fair machine. tt-ttold was ZERO --- Divide by Zero Error! |
Code Archives Forum