Разработчик
Регистрация: 04.04.2012
Сообщений: 468
Написано 37 полезных сообщений (для 60 пользователей)
|
Ответ: Советы по оптимизации
ВСЁ!! Сделал тест, и был удивлён!
Тест проведён на 1000 сфер, с разным количеством вызовов CameraPick в 3-х возможных режимах
Режим кол-во вызовов FPS
Sphere 15 60
Mesh 15 3
Box 15 30
Mesh 1 40
Честно, не ожидал что такая большая нагрузка будет.
Ссылка http://www.sendspace.com/file/ha9vz2
Жмём Click here to start download from sendspace
Исходник

Global n=1000 ;Число кубиков count of cubes
;=========================
Graphics3D 1024,768,32,2
SetBuffer BackBuffer()
Global PCount
Global camera=CreateCamera()
Global camAX#,camAY#
PositionEntity camera,0,0,-10
RotateEntity camera,0,0,0
CameraRange camera,0.1,400
lit=CreateLight()
Type mesh
Field mesh
Field x#,y#,z#
Field ax,ay,az
Field scale#
Field r,g,b
End Type
Global cube=CreateSphere(10)
Global sp=CreateSphere()
ScaleEntity sp,0.2,0.3,0.2
For i=1 To n
mesh.mesh=New mesh
mesh\mesh=CopyMesh(cube)
mesh\x=Rnd(-200,200)
mesh\z=Rnd(-200,200)
mesh\ay=Rand(0,360)
mesh\scale=Rnd(0.8,1.2)
mesh\r=Rand(30,250) : mesh\g=Rand(30,250) : mesh\b=Rand(30,250)
PositionEntity mesh\mesh,mesh\x,mesh\y,mesh\z
ScaleEntity mesh\mesh,mesh\scale,mesh\scale,mesh\scale
EntityBox mesh\mesh,0,0,0,mesh\scale,mesh\scale,mesh\scale
EntityRadius mesh\mesh,mesh\scale,mesh\scale
RotateEntity mesh\mesh,mesh\ax,mesh\ay,mesh\az
EntityColor mesh\mesh,mesh\r,mesh\g,mesh\b
EntityAutoFade mesh\mesh,200,200
Next
Global distPivot=CreatePivot()
Global mode=0
Global time,timeMean#,timeHAF
Global f1=MilliSecs()
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
While Not KeyHit(1)
frame=MilliSecs()
CameraControl(camera)
For i=1 To PCount
CameraPick camera,GraphicsWidth()/2,GraphicsHeight()/2
Next
PositionEntity sp,PickedX(),PickedY(),PickedZ()
EntityColor sp,120+120*Sin(frame/2),120+120*Sin(frame/3),120+120*Sin(frame/4)
RenderWorld
If KeyHit(57) Then
mode=mode+1
PickModeAllMesh()
If mode>3 Then mode=0
EndIf
PCount=PCount+KeyHit(13)-KeyHit(12)
Text 5,10,"Tris: "+TrisRendered()
Text 5,30,"Cubes: "+TrisRendered()/12
If time=0 Then time=17
fps=1000/time
timeMean=(timeMean+time)/2
Text 5,50,"FPS: "+fps+" "+1000/timeMean
Text 5,70,"Pick Lines count: "+PCount
Select mode
Case 0 : modeStr$="no pick"
Case 1 : modeStr$="sphere pick"
Case 2 : modeStr$="mesh pick"
Case 3 : modeStr$="box pick"
End Select
Text 5,90,"Pick Mode: "+modeStr
Color 200,100,100 : Text GraphicsWidth()/2,300,"Key SPACE to switch mode!" : Color 255,255,255
Color 200,100,100 : Text GraphicsWidth()/2,330,"Key '+' and '-' to count pick line" : Color 255,255,255
Flip
time=MilliSecs()-frame
Wend
End
Function CameraControl(cam)
camAX=camAX-MouseXSpeed()*0.3
camAY=camAY+MouseYSpeed()*0.3
MoveMouse GraphicsWidth()/2,GraphicsHeight()/2
RotateEntity cam,camAY,camAX,0
MoveEntity cam,(KeyDown(205)-KeyDown(203))*3,0,(KeyDown(200)-KeyDown(208))*3
End Function
Function PickModeAllMesh()
For mesh.mesh=Each mesh
EntityPickMode mesh\mesh,mode
Next
End Function
__________________
|