Cpu Auslastung

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Foppele

Betreff: Cpu Auslastung

BeitragMi, Feb 25, 2009 1:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

;---------------------------------------------------------------------------------------------------------------------------------

hectic

Sieger des IS Talentwettbewerb 2006

BeitragMi, Feb 25, 2009 1:12
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMi, Feb 25, 2009 11:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, hab nen Dualcore Confused , dann weiss ich wenigstens woran es liegt.
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.

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group