Hello
ima747 try this code.
The original code is for blitz3d. I have modified it for minib3d
';
'; Depth of Field
';
'; Created by Mikkel Fredborg
'; Use as you please!
';
' Modified for Blitzmax by IceVAN/Purples Studios
Import sidesign.minib3d
Graphics3D 800,600,32,True
'SetBuffer BackBuffer()
HideMouse
';
'; Create a camera...
camera = CreateCamera()
CameraRange camera,0.1,1000.0
CameraFogMode camera,True
CameraFogRange camera,100,1000
CameraClsColor camera,220,220,220
';
'; create some cubes
For i = 0 To 300
cube = CreateCube()
PositionEntity cube,Rnd(-200,200),Rnd(-200,200),Rnd(-200,200)
RotateEntity cube,Rnd(-180,180),Rnd(-180,180),Rnd(-180,180)
ScaleEntity cube,Rnd(1,20),Rnd(1,20),Rnd(1,20)
EntityColor cube,Rand(0,255),Rand(0,255),Rand(0,255)
Next
';
'; Light
light = CreateLight()
RotateEntity light,90,0,0
'; Depth of Field setup
Type DepthOfField
Field layers
Field layer[99]
Field texture:ttexture
Field tsize
Field tbuffer:ttexture
Field near#,far#
Field camera
End Type
dof:DepthOfField = DOF_Create(camera,10,2.0)
Repeat
RotateEntity camera,MouseY(),MouseX(),0
MoveEntity camera,KeyDown(KEY_RIGHT)-KeyDown(KEY_LEFT),0,KeyDown(KEY_UP)-KeyDown(KEY_DOWN)
DOF_Update(dof)
RenderWorld
Flip False
Until KeyHit(KEY_ESCAPE)
End
Function DOF_Update(dof:depthoffield)
HideEntity dof.layer[0]
CameraRange dof.camera,dof.near*.95,1000
CameraViewport dof.camera,0,0,dof.tsize,dof.tsize
RenderWorld
' CopyRect 0,0,dof.tsize,dof.tsize,0,0,BackBuffer(),dof.tbuffer
BackBufferToTex(dof.tbuffer)
ShowEntity dof.layer[0]
CameraRange dof.camera,0.1,1000
CameraViewport dof.camera,0,0,GraphicsWidth(),GraphicsHeight()
End Function
Function DOF_Create:DepthOfField(camera,layers,spread#=0.0)
dof:depthoffield = New depthoffield
dof.camera = camera
dof.layers = layers
dof.tsize = 512
dof.near = 100.0
dof.far = 200.0
ClearTextureFilters
dof.texture = CreateTexture(dof.tsize,dof.tsize,1+256+16+32)
' dof.tbuffer = TextureBuffer(dof.texture)
dof.tbuffer = dof.texture
ang# = 360.0/Float(dof.layers)
For i = 0 To dof.layers-1
dof.layer[i] = CreateFace(1)
EntityAlpha dof.layer[i],1.0/Float(dof.layers)
EntityFX dof.layer[i],1+8+16
ps# = dof.near+(i*((dof.far-dof.near)/Float(dof.layers)))
px# = Sin(i*ang)*(i/Float(dof.layers))*spread
py# = Cos(i*ang)*(i/Float(dof.layers))*spread
PositionEntity dof.layer[i],px,py,ps
ScaleEntity dof.layer[i],ps,ps,1.0
EntityTexture dof.layer[i],dof.texture
If i = 0
EntityParent dof.layer[i],dof.camera,True
Else
EntityParent dof.layer[i],dof.layer[i-1],True
End If
Next
Return dof
End Function
Function CreateFace(segs=1,parent=0)
mesh=CreateMesh( parent )
surf=CreateSurface( mesh )
stx#=-1.0
sty#=stx
stp#=Float(2)/Float(segs)
y#=sty
For a=0 To segs
x#=stx
v#=a/Float(segs)
For b=0 To segs
u#=b/Float(segs)
AddVertex(surf,x,y,0,u,v) ; 'swap these For a different start orientation
x=x+stp
Next
y=y+stp
Next
For a=0 To segs-1
For b=0 To segs-1
v0=a*(segs+1)+b
v1=v0+1
v2=(a+1)*(segs+1)+b+1
v3=v2-1
AddTriangle( surf,v0,v2,v1 )
AddTriangle( surf,v0,v3,v2 )
Next
Next
FlipMesh mesh
UpdateNormals mesh
'EntityFX(mesh,17)
Return mesh
End Function