Cpu Auslastung
Übersicht

![]() |
FoppeleBetreff: Cpu Auslastung |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hallo,
ich baue gerade einen kleinen SpassRenderer der eigentlich ganz gut funktioniert, allerdings ist er nicht besonders schnell, auf ein 100 x 100 pixel bild muss man ca 1 Stunde warten... na ja, ich habe mal den Task Manager gecheckt und der sagt, ich habe beim Rendern nur 50% CPU Auslastung. Ich habe schon verschiedene Flip und VWait Settings ausprobiert, aber ohne Erfolg. Wäre nett wenn ihr mal nenBlick drauf werfen würdet: Code: [AUSKLAPPEN] Graphics3D 640,480,0,2 SetBuffer BackBuffer() Type camType Field mesh End Type Dim sampler(200,200) ;Cams----------------------------------------------------------- Maincam=CreateCamera() PositionEntity Maincam,0,-0,-1.6 CameraViewport Maincam,440,140,100,100 CameraRange Maincam,0.001,1000 Maincam2=CreateCamera() CameraViewport Maincam2,440,260,20,20 CameraRange Maincam2,0.001,1000 ;Meshes--------------------------------------------------------- sphere=CreateSphere(32) PositionEntity sphere,0,0,0 EntityPickMode sphere,2 EntityColor sphere,0,0,0 sphere2=CreateSphere(32) PositionEntity sphere2,0.5,0.7,0.3 EntityPickMode sphere2,2 EntityColor sphere2,0,0,0 Global plane=CreateCube() ScaleEntity plane ,200,1,200 EntityPickMode plane,2 PositionEntity plane,0,-2,0 EntityColor plane,0,0,0 Global plane2=CreateCube() ScaleEntity plane2 ,1,10,10 EntityPickMode plane2,2 PositionEntity plane2,-5,0,0 EntityColor plane2,0,0,0 Global sky=CreateSphere() ScaleEntity sky ,100,100,100 EntityPickMode sky,2 FlipMesh sky EntityColor sky,80,80,255 EntityFX sky,1 ;Programm----------------------------------------------------------------------------------------- ClsColor 150,150,150 Cls While Not KeyDown( 1 ) For a = 1 To 100 Step 1 For b = 1 To 100 Step 1 RotateEntity Maincam2,Rnd(0,360),Rnd(0,360),Rnd(0,360) CameraPick (Maincam,a,b) If PickedEntity() = sky Then WritePixel 440+a,20+b,ARGB_Color(255,80,80,255) Else PositionEntity Maincam2,PickedX(),PickedY(),PickedZ() AlignToVector Maincam2,PickedNX(),PickedNY(),PickedNZ(),3 Local sampledRed = 0 Local sampledGreen = 0 Local sampledBlue = 0 For x=1 To 20 For y =1 To 20 CameraPick (Maincam2,x,y) If PickedEntity() = sky Then For u=0 To 9 For v=0 To 9 WritePixel 10*x+u,10*y+v,ARGB_Color(255,80,80,255) Next Next Else c.camType=New camType c\mesh = CreateCamera() CameraViewport c\mesh,x*10,y*10,10,10 CameraRange c\mesh,0.001,1000 PositionEntity c\mesh,PickedX(),PickedY(),PickedZ() AlignToVector c\mesh,PickedNX(),PickedNY(),PickedNZ(),3 EndIf Next Next RenderWorld For x=1 To 200 For y=1 To 200 sampler(x,y)=ReadPixel(x+10,y+10) Next Next For x=1 To 200 For y=1 To 200 sampledRed = sampledRed + ARGB_Red(sampler(x,y)) sampledGreen = sampledGreen + ARGB_Green(sampler(x,y)) sampledBlue = sampledBlue + ARGB_Blue(sampler(x,y)) Next Next sampledRed = sampledRed/40000 sampledGreen = sampledGreen/40000 sampledBlue = sampledBlue/40000 WritePixel 440+a,20+b,ARGB_Color(255,sampledRed*0.7,sampledGreen*0.7,sampledBlue*0.7) EndIf Flip ;KillCams---------------------------------------- For c.camType = Each camType FreeEntity c\mesh Delete c Next ;--------------------------------------------- Next Next Wend ;----------------------------------------------------------------------------------------------------------------------------------- Function ARGB_Color(Alpha,Red,Green,Blue) Return (Alpha*$1000000+Red*$10000+Green*$100+Blue) End Function ;---------------------------------------------------------------------------------------------------------------------------------- Function ARGB_Red(ARGB) Return ((ARGB And $00FF0000) / $10000) End Function ;---------------------------------------------------------------------------------------------------------------------------------- Function ARGB_Green(ARGB) Return ((ARGB And $0000FF00) / $100) End Function ;--------------------------------------------------------------------------------------------------------------------------------- Function ARGB_Blue(ARGB) Return (ARGB And $000000FF) End Function ;--------------------------------------------------------------------------------------------------------------------------------- |
||
![]() |
hecticSieger des IS Talentwettbewerb 2006 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Du hast vermutlich ein Dualcore oder ein Pentium mit HT (pseudo-Doppelkern), wonach eben dann ''nur'' der eine Kern angesprochen wird. Blitz3D unterstützt kein Mehrprozessorkern. Und selbst wenn es das tun würde, wäre das Ansprechen auf diesen nicht gerade eines der einfachsten Sachen die man beim programmieren erledigen kann.
Im übrigen ist WritePixelFast um Mengen schneller. |
||
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D |
![]() |
Foppele |
![]() Antworten mit Zitat ![]() |
---|---|---|
Ja, hab nen Dualcore ![]() Auf Read/WritePixelFast wollte ich eh noch umstellen, aber das ist glaube ich eher nebensächlich, was lange dauert sind die 400 CameraPicks pro Durchgang. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group