Вот ещё мой пример(абсолютно похоже делать было влом
) :
[blitz]
Global fpsindex#, fpstime#, fpsfold_millisecs#, fpsfps#
Graphics3D 640,480,32,1
AmbientLight *255,255,255
centerH = CreatePivot()
; create camera
cam=CreateCamera(PlayerPiv)
CameraClsColor cam,100,100,100
radiuscam# = 70
; load sphere
mesh = * LoadMesh("unit1.x")
ScaleMesh mesh, .1, .1, .1
HideEntity mesh
WFCube = CreateCube()
EntityFX WFCube,16
ScaleEntity WFCube,40,40,40
HideEntity WFCube
Dim center(200)
Dim Random#(200,3)
; create spheres
For i=1 To 200
center(i)= *CreatePivot(centerH)
meshC = CopyEntity ( mesh , center(i))
MoveEntity meshC,Rand(-30,30),Rand(-30,30),Rand(-30,30)
Random#(i,0)=Rnd(-1,1)+.01
Random#(i,1)=Rnd(-1,1)+.01
Random#(i,2)=Rnd(-1,1)+.01
Next
SetBuffer BackBuffer()
Const FPS=60
period=1000/FPS
time=MilliSecs()-period
While Not MouseHit(3) Or (KeyHit(1))
Repeat
*elapsed=MilliSecs()-time
Until elapsed
ticks=elapsed/period
tween#=Float(elapsed Mod period)/Float(period)
For k=1 To ticks
* * * * * *time=time+period
*
timeD#= timeD+1
For i=1 To 200
TurnEntity center(i), 1*Random#(i,0), 1*Random#(i,1), 1*Random#(i,2)
Next
PositionEntity cam, radiuscam#*Sin(timeD) - 0, radiuscam#*Sin(timeD), radiuscam#*Cos(timeD) - 0
PointEntity cam, mesh
Next
RenderWorld
HideEntity centerH
ShowEntity WFCube
WireFrame 1
CameraClsMode cam,0,0
RenderWorld
WireFrame 0
CameraClsMode cam,1,1
HideEntity WFCube
ShowEntity centerH
Text 5,5, fps(50)
Flip 0
Wend
End
Function fps(time=100)
fpsindex=fpsindex+1
fpstime=fpstime+MilliSecs()-fpsfold_millisecs
If fpstime>=time
*fpsfps=fpsindex*(1000.0/fpstime#)
*fpsindex=0
*fpstime=0
EndIf
fpsfold_Millisecs=MilliSecs()
Return fpsfps
End Function
[/blitz]
ЗЫ
Блиц ~500фпс
Ирлич ~400фпс (в огл рендере - 450)
п4 2.8, 512, ГФ 5600 128