Extremer Leistungseinbruch -> wieso? :-( [gelöst]

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

satzzeichen

Betreff: Extremer Leistungseinbruch -> wieso? :-( [gelöst]

BeitragSa, Sep 01, 2007 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hoi,

also ich hab mir gerade die Blitz3D Demo gesaugt und wollte damit mal ein wenig basteln. Also habe ich einfach mal ein paar Beispiele aus der Dokumentation umgesetzt.

Ein Terrain mit "TerrainDetail terrain,2000,True" und darauf 10 einfache Meshes platziert (ein mal eingeladen und dann 9 mal CopyEntity).

Nun erlebt meine kleine Welt einen erheblichen Performance Einbruch sobald ich mit der Kamera über die Stelle mit den 10 Meshes gehe Sad und ich weis absolut nicht wieso!

Ich hoffe ihr könnt mir helfen und mir sagen wie ich solche Leistungsabstürze vermeiden kann. Ich habe es auch schon per Fullscreen statt Window und ohne Debuger bzw. Morphing (für Terrain) probiert - es wurde zwar jeweils ein Stückchen besser aber nur marginal Sad.

Danke für eure Hilfe schon im Vorraus,

gratz satzzeichen

PS: Hier der Code, das sagt bestimmt mehr als 1000 Worte...

Code: [AUSKLAPPEN]
Graphics3D 640,480
SetBuffer BackBuffer()

camera=CreateCamera()
PositionEntity camera,0,10,0
TurnEntity camera,90,0,0

light=CreateLight()
RotateEntity light,90,0,0

; Create terrain
;terrain=CreateTerrain(128)
terrain=LoadTerrain( "height_map.bmp" )
TerrainDetail terrain,2000,True
ScaleEntity terrain,0.2,3,0.2

; Texture terrain
grass_tex=LoadTexture( "mossyground.bmp" )
ScaleTexture grass_tex,75,75
EntityTexture terrain,grass_tex

While Not KeyDown( 1 )

If KeyDown( 208)=True Then MoveEntity camera,0,-0.5 ,0
If KeyDown( 200)=True Then MoveEntity camera,0,0.5 ,0

If KeyDown( 74 )=True Then MoveEntity camera,0,0,-0.5
If KeyDown( 78)=True Then MoveEntity camera,0,0,0.5

If KeyDown( 203 )=True Then MoveEntity camera,-0.5,0,0
If KeyDown( 205 )=True Then MoveEntity camera,0.5,0,0

If EntityX(camera) < 1
  PositionEntity camera,1,EntityY(camera),EntityZ(camera)
EndIf

If EntityX(camera) > 50
  PositionEntity camera,50,EntityY(camera),EntityZ(camera)
EndIf

If EntityY(camera) < 10
  PositionEntity camera,EntityX(camera),10,EntityZ(camera)
EndIf

If EntityY(camera) > 50
  PositionEntity camera,EntityX(camera),50,EntityZ(camera)
EndIf

If EntityZ(camera) < 1
  PositionEntity camera,EntityX(camera),EntityY(camera),1
EndIf

If EntityZ(camera) > 50
  PositionEntity camera,EntityX(camera),EntityY(camera),50
EndIf

; Load mesh
gargoyle=LoadMesh("oildrum.3ds")


;PositionEntity gargoyle,5,1,20
ScaleEntity gargoyle,0.015,0.015,0.015

For z=0 To 10 Step 1

newgarg=CopyEntity(gargoyle)
PositionEntity newgarg,5+(z*1),5,20

Next



RenderWorld

Text 0,0,"Use cursor keys to move about the terrain"

Flip

Wend

End
Der erhabene Geist schafft am meisten, wenn er am wenigsten arbeitet. Leonardo da Vinci
  • Zuletzt bearbeitet von satzzeichen am Sa, Sep 01, 2007 16:40, insgesamt einmal bearbeitet

tft

BeitragSa, Sep 01, 2007 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi

For z=0 To 10 Step 1

newgarg=CopyEntity(gargoyle)
PositionEntity newgarg,5+(z*1),5,20

Next

das in die Hauptschleife zu parken ist technischcer selbstmord. Du erzeugst bei jedem Frame neu objekte.... das muss einmal an den anfang.

Gruss TFT

Edit : Lass das Step weg . Das ist nicht nötig.

Edit : und das Z*1 ändere am besten in z, und dann weg mit den klammern.

Es gibt keine doofen Fragen... nur doofe antworten.

Fiel spass noch.
TFT
https://www.sourcemagic.ch
Monkey,HTML5,CSS3,W 10 64 Bit, 32 GB Ram, GTX Titan, W8 ist Müll !!!!!!
  • Zuletzt bearbeitet von tft am Sa, Sep 01, 2007 16:01, insgesamt 2-mal bearbeitet
 

ChristianK

BeitragSa, Sep 01, 2007 15:57
Antworten mit Zitat
Benutzer-Profile anzeigen
Du benutzt CopyEntity in der While/Wend-Schleife. Das heisst, bei jedem Schleifendurchlauf werden 10 neue Meshes produziert. Da kommen schnell ein paar tausend Stück zusammen.
Platziere also einfach die For/Next-Schleife vor der Hauptschleife.
AdvanceLcd
Intel Core 2 Duo 3.2 GHz, 4 GB RAM, GeForce 8800 GTX | MacBook Pro 15,4″ Intel Core 2 Duo 2.4 GHz, 2 GB RAM, GeForce 8600M GT

satzzeichen

BeitragSa, Sep 01, 2007 16:00
Antworten mit Zitat
Benutzer-Profile anzeigen
Oh lol Laughing ich Idiot. Danke für die (extrem schnellen!) Antworten!
Der erhabene Geist schafft am meisten, wenn er am wenigsten arbeitet. Leonardo da Vinci

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group