stark sinkende fps zahl dank renderworld

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

Ofenrohr

Betreff: stark sinkende fps zahl dank renderworld

BeitragSa, Dez 18, 2004 17:23
Antworten mit Zitat
Benutzer-Profile anzeigen
hallo,

ich habe ein 3d terrain mit 1000 sprites. in der hauptschleife werden keine objekte hinzugefügt o.ä. leider sinkt meine fps zahl mit der zeit. nach 300 sec hab ich nurnoch 10 fps anstatt 60. ich habe das programm mit debuglog und millisecs unter die lupe genommen und festgestellt das renderworld am anfang gerade 5 millisecunden dauert und gegen ende ganze 15. weis jemand woran das liegt? bzw. hatte jmd. ein ähnliches problem?

mfg ofenrohr
Ofenrohr.net

BladeRunner

Moderator

BeitragSa, Dez 18, 2004 17:26
Antworten mit Zitat
Benutzer-Profile anzeigen
wenn renderworld immer mehr zeit in anspruch nimmt kann ich nur vermuten dass du doch irgendwo noch objekte erzeugst, welche dann beim rendern auf die bremse treten. aber ohne code wird dir keiner genaueres sagen können.
Zu Diensten, Bürger.
Intel T2300, 2.5GB DDR 533, Mobility Radeon X1600 Win XP Home SP3
Intel T8400, 4GB DDR3, Nvidia GF9700M GTS Win 7/64
B3D BMax MaxGUI

Stolzer Gewinner des BAC#48, #52 & #92
 

Dreamora

BeitragSa, Dez 18, 2004 17:27
Antworten mit Zitat
Benutzer-Profile anzeigen
Was machst du dabei genau?

Meine Vermutung aufgrund dessen was u schreibst:
Ich nehme mal an, dass du in der Loop nichts lädst, lediglich den Sprites näherkommst. Sobald man Sprites zu nahe kommt oder besser sobald sie "zu gross" angezeigt werden müssen, bricht die Performance vollständig ein, was wie mir ma gesagt wurde, an der Füllrate liegen soll.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Ofenrohr

BeitragSa, Dez 18, 2004 17:35
Antworten mit Zitat
Benutzer-Profile anzeigen
tut mir leid, ist ein bisschen viel.

BlitzBasic: [AUSKLAPPEN]
DebugLog MilliSecs()

Color 0,0,0

MoveMouse(400,300)

mxs = MouseXSpeed()/1.5
mys = MouseYSpeed()/1.5
row = row + mys
If mxs < 0 Then mxs = Abs(mxs) Else mxs = mxs - mxs - mxs
pitch = pitch + mxs
If row > 90 Then row = 90
If row < -90 Then row = -90
RotateEntity(cam,row,pitch,yaw)

DebugLog \"Mouse\"+MilliSecs()

If KeyHit(1) = 1 Then ClearWorld() : Goto start
If KeyDown(31) = 1 Then MoveEntity cam, 0,0,-0.2
If KeyDown(17) = 1 Then MoveEntity cam, 0,0,0.2
If KeyDown(30) = 1 Then MoveEntity cam, -0.2,0,0
If KeyDown(32) = 1 Then MoveEntity cam, 0.2,0,0
If KeyHit(57) = 1 Then If freelook = 0 Then jump = 1 : down = 0
If KeyDown(57) = 1 Then If freelook = 1 Then PositionEntity(cam, EntityX(cam),EntityY(cam)+0.2,EntityZ(cam))
If KeyDown(29) = 1 Then If freelook = 0 Then duck = 1 Else duck = 0 : PositionEntity(cam, EntityX(cam),EntityY(cam)-0.2,EntityZ(cam))
If KeyHit(59) = 1 Then If fog = 0 Then fog = 1 Else fog = 0
If KeyHit(60) = 1 Then If wire = 0 Then wire = 1 Else wire = 0
If KeyHit(61) = 1 Then If menuevis = 0 Then menuevis = 1 Else menuevis = 0
If KeyHit(62) = 1 Then If minimapvis = 0 Then minimapvis = 1 Else minimapvis = 0
If KeyHit(63) = 1 Then If fadenkreuzvis = 1 Then fadenkreuzvis = 0 Else fadenkreuzvis = 1
If KeyHit(64) = 1 Then If wolken = 1 Then HideEntity himmel : wolken = 0 Else ShowEntity himmel : wolken = 1
If KeyHit(65) = 1 Then If wasservis = 1 Then HideEntity wasser : wasservis = 0 Else ShowEntity wasser : wasservis = 1
If KeyDown(66) = 1 Then terrains = terrains - 0.2
If KeyHit(67) = 1 Then If freelook = 0 Then freelook = 1 Else freelook = 0
If GetMouse() = 2 Then If zoom = 1 Then zoom = 2 Else zoom = 1
If KeyHit(88) = 1 Then screen = screen + 1 : SaveBuffer(FrontBuffer(),CurrentDir()+\"screenshots\Screenshot \" + mapname + \" - \" + screen + \".bmp\")

DebugLog \"Keys\"+MilliSecs()

CameraFogMode(cam,fog)
WireFrame(wire)
ScaleEntity(terrain,2,terrains,2)
CameraZoom(cam, zoom)

If EntityX(cam) > TerrainSize(terrain)*2 Then PositionEntity(cam,TerrainSize(terrain)*2,EntityY(cam),EntityZ(cam))
If EntityX(cam) < 0 Then PositionEntity(cam,0,EntityY(cam),EntityZ(cam))
If EntityZ(cam) > TerrainSize(terrain)*2 Then PositionEntity(cam,EntityX(cam),EntityY(cam),TerrainSize(terrain)*2)
If EntityZ(cam) < 0 Then PositionEntity(cam,EntityX(cam),EntityY(cam),0)

If jump = 1 Then
duck = 0
PositionEntity(cam, EntityX(cam),EntityY(cam)+0.1,EntityZ(cam))
If terra_p# < 2 Then terra_p = terra_p + 0.1 Else down = 1 : jump = 0
If down = 1 Then If terra_p > 0 Then terra_p = terra_p - 0.1
Else
If terra_p > 0 Then terra_p = terra_p - 0.1
If (terra_p < 0.1) And (terra_p > 0) Then terra_p = 0
EndIf

DebugLog \"Jump\"+MilliSecs()

If duck = 1 Then
jump = 0
If terra_p > -0.7 Then terra_p = terra_p - 0.05 Else duck = 0
Else
If terra_p < 0 Then terra_p = terra_p + 0.05
If (terra_p > -0.06) And (terra_p < 0) Then terra_p = 0
EndIf

DebugLog \"Duck\"+MilliSecs()

terra_y# = TerrainY(terrain,EntityX(cam),EntityY(cam),EntityZ(cam))+2.5
If terra_y < wassers+2.5 Then terra_y = wassers + 2.5 : inwater% = 1 Else inwater = 0
If freelook = 1 Then
If EntityY(cam) < terra_y Then PositionEntity(cam,EntityX(cam),terra_y,EntityZ(cam))
Else
PositionEntity(cam,EntityX(cam),terra_y+terra_p,EntityZ(cam))
EndIf

DebugLog \"Terra\"+MilliSecs()

If minimapvis = 1 Then
DrawImage(minimap,0,0)

Line EntityX(cam)/div,EntityZ(cam)/div,EntityX(cam)/div+(Cos(pitch+70)*radius),EntityZ(cam)/div+(Sin(pitch+70)*radius)
Line EntityX(cam)/div,EntityZ(cam)/div,EntityX(cam)/div+(Cos(pitch+110)*radius),EntityZ(cam)/div+(Sin(pitch+110)*radius)

EndIf

DebugLog \"Minimap\"+MilliSecs()

If fadenkreuzvis = 1 Then DrawImage(fadenkreuz,512-(ImageWidth(fadenkreuz)/2),384-(ImageHeight(fadenkreuz))/2)

DebugLog \"Fadenkreuz\"+MilliSecs()

If menuevis = 1 Then

Text 150,10,\"Camera X: \" + EntityX(cam)
Text 150,20,\"Camera Y: \" + EntityY(cam)
Text 150,30,\"Camera Z: \" + EntityZ(cam)

Text 150,50,\"Terrainhöhe: \" + (terra_y-2)
Text 150,60,\"Wasserhöhe: \" + wassers

Text 150,80,\"Row: \" + row
Text 150,90,\"Pitch: \" + pitch
Text 150,100,\"Yaw: \" + yaw

Text 350,10,\"Wireframe: \" + wire
Text 350,20,\"Nebel: \" + fog
Text 350,30,\"Minimap: \" + minimapvis

Text 350,50,\"FPS: \" + cfps

Text 350,70,\"Terraingröße: \" + TerrainSize(terrain)

Text 350,90,\"Frei bewegen: \" + freelook

Text 550,10,\"Objekte: \" + anzobj
Text 550,20,\"Collisionen: \" + CountCollisions(cam)

Text 550,40,\"Terra_p: \" + terra_p

Text 550,60,\"Sekunden: \" + sec

Text 550,80,\"Wolken: \" + wolken
Text 550,90,\"Wasser: \" + wasservis

EndIf

DebugLog \"Statistik\"+MilliSecs()

wasseru# = wasseru + 0.00005
wasserv# = wasserv + 0.00005
If wasseru > 1 Then wasseru = 0
If wasserv > 1 Then wasserv = 0
PositionTexture wassertex, wasseru,wasserv

himmelu# = himmelu + 0.00005
himmelv# = himmelv + 0.00005
If himmelu > 1 Then himmelu = 0
If himmelv > 1 Then himmelv = 0
PositionTexture himmeltex, himmelu,himmelv

DebugLog \"Himmel / Wasser bewegung\"+MilliSecs()

fps = fps + 1
If MilliSecs() - lastfps > 1000 Then
lastfps = MilliSecs()
cfps = fps
fps = 0
EndIf

DebugLog \"FPS:\"+cfps

If (MilliSecs() / 1000) > lastsec Then
sec = sec + 1
lastsec = MilliSecs() / 1000
EndIf

DebugLog \"Count\"+MilliSecs()

Flip() : DebugLog \"Flip\"+MilliSecs()
Collisions 1,2,2,2 : DebugLog \"Coll\"+MilliSecs()
UpdateWorld() : DebugLog \"Update\"+MilliSecs()
RenderWorld(1) : DebugLog \"Render\"+MilliSecs()

DebugLog \"Render\"+MilliSecs()

DebugLog MilliSecs()
Ofenrohr.net
 

Dreamora

BeitragSa, Dez 18, 2004 17:41
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich nehme ma an das ist ie komplete Mainloop oder?
Hmm sehe da keine Sprites
Deshalb gehe ich davon aus, dass sie eine statische Position haben, womit oben beschriebenes Problem mit dem "verhältnismässig zu gross werden" ein Problem darstellen könnte
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

Plasma(alt)

Betreff: ja

BeitragSa, Dez 18, 2004 17:51
Antworten mit Zitat
Benutzer-Profile anzeigen
dreamora hat recht solltest du wirklich keine neuen objekte erstellen
kann es nur an der füllrate liegen .


aber probier noch nen neuen kartentreiber kann ja sein daß...
DIV is dead !

Ofenrohr

BeitragSo, Dez 19, 2004 12:53
Antworten mit Zitat
Benutzer-Profile anzeigen
kartentreiber ist eine fehlanzeige. hab es auf einem anderen pc getestet.

füllrate kann leider auchnicht sein. ich habe einfach die sprites wieder außgebaut und das problem bleibt!!!

Crying or Very sad

hat jemand noch eine andere idee woran es liegen könnte?

mfg ofenrohr
Ofenrohr.net

Markus2

BeitragSo, Dez 19, 2004 13:19
Antworten mit Zitat
Benutzer-Profile anzeigen
COLLISIONS 1,2,2,2
kann man vor der Hauptschleife einmal aufrufen ,
ClearCollisions nach der Schleife um alles wieder
frei zu geben .

Ofenrohr

BeitragSo, Dez 19, 2004 13:30
Antworten mit Zitat
Benutzer-Profile anzeigen
hab ich aber das problem bleibt.

aber trotzdem danke für den tipp
Ofenrohr.net

Markus2

BeitragMo, Dez 20, 2004 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

an deiner Stelle würde ich die Debuglogs raus werfen und
die Zeiten in einer Variable speichern weil ja jedes
Debuglog was ausgegeben wird auch Zeit kostet und
darum ist deine Messung falsch .

Haste du das Problem jetzt auch wenn du Blitz Basic im nicht DebugModus
laufen läßt ?

Ofenrohr

BeitragDi, Dez 21, 2004 14:28
Antworten mit Zitat
Benutzer-Profile anzeigen
das problem ist auch da, wenn ich eine .exe erstelle oder blitz ohne debug laufen lasse.

und die fps sinken nicht auf einen schlag sondern langsam (ca. 1 fps alle 2-3 sec)

als nächstes werde ich die functionen systematisch ausbauen und werde dann früher oder später schon noch herausfinden wo das problem liegt.

mfg ofenrohr
Ofenrohr.net

Markus2

BeitragDi, Dez 21, 2004 20:02
Antworten mit Zitat
Benutzer-Profile anzeigen
Jo , und hoffen das deine FPS Berechnung richtig ist Smile

Ofenrohr

BeitragSo, Dez 26, 2004 0:22
Antworten mit Zitat
Benutzer-Profile anzeigen
hat ja vorher auch geklapt.

da der code müllig von der aufteilung ist mach ich einfach alles nochmal neu.

mfg ofenrohr
Ofenrohr.net

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group