Cubemap Geschwindigkeit

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

smeagle24

Betreff: Cubemap Geschwindigkeit

BeitragFr, Mai 08, 2009 23:36
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich probiere gerade ein wenig mit Cubemapping rum. Nun habe ich folgendes Problem, das das ganze von der Framerate her mit 21 Frames pro Sekunde doch etwas langsam ist. Und wenn ich noch ein paar Modelle laden will, dann gehts sogar runter bis auf 6 Frames pro Sekunde.
Bei meiner Suche im Forum habe ich mehrmals denn Hinweis gefunden, das man nur eine Seite des Cubmaps pro Frame rendern soll. Kann mir das vielleicht jemand erklären, wie das gehen soll?


Code: [AUSKLAPPEN]
Graphics3D 800,600,32,1

SetBuffer BackBuffer()

Global timer=CreateTimer(50)
AntiAlias = 1
AmbientLight 229,229,229
Global main_light=CreateLight(1)
Global cam_pivot=CreatePivot()
Global main_cam=CreateCamera()
Global cube_cam = CreateCamera()
Global tex = CreateTexture(256, 256, 1 + 128 + 256)
PositionEntity main_cam,380,5,76
PositionEntity cam_pivot,380,5,76
EntityType main_cam,1
EntityRadius main_cam,2
EntityType cam_pivot,1

Global automatiktuer
Global animation_zaehler=1

Collisions 1, 2, 2, 3

LoadImages()

While Not KeyHit(1)

   HidePointer
   
   Cls
   
   counter=counter+1
   If time=0 Then time=MilliSecs()   
   If time + 1001< MilliSecs() Then
   framerate=counter
   counter=0
   time=MilliSecs()
   EndIf
   
   Steuerung()
   
   Animation()
   
   MoveMouse 400,MouseY()
   
   UpdateCubemap(tex,cube_cam,automatiktuer)

   UpdateWorld()
   RenderWorld()
      
   Text 120,80,framerate

   WaitTimer(timer)
   
Flip

Wend

End

Function Steuerung()


   TurnEntity cam_pivot,0,0 -MouseXSpeed(),0
    TurnEntity main_cam, MouseYSpeed(),0,0
    RotateEntity cam_pivot, EntityPitch#(cam_pivot), EntityYaw#(cam_pivot),0
   RotateEntity main_cam, EntityPitch#(main_cam), EntityYaw#(cam_pivot),0

   If KeyDown(31) Then MoveEntity cam_pivot, 0, 0, -.8
   If KeyDown(17) Then MoveEntity cam_pivot, 0, 0,.8
   If KeyDown(32) Then MoveEntity cam_pivot, .8, 0, 0
   If KeyDown(30) Then MoveEntity cam_pivot, -.8,0, 0

   PositionEntity main_cam, EntityX#(cam_pivot), EntityY#(cam_pivot), EntityZ#(cam_pivot)
   PositionEntity cam_pivot, EntityX#(main_cam), EntityY#(main_cam), EntityZ#(main_cam)
   
End Function


Function LoadImages()

   depot=LoadMesh("data\depot.b3d")
   depot_tex=LoadTexture("data\rough.jpg")
   ScaleTexture depot_tex,10,10
   EntityTexture depot,depot_tex,0,1
   PositionEntity depot,200,0,200
   ScaleEntity depot,1.5,1.5,1.5
   EntityType depot,2
   
   automatiktuer=LoadAnimMesh("data\tuer_animation_walk.b3d")
   RotateEntity automatiktuer,0,90,0
   ScaleEntity automatiktuer,.9,1,1
   PositionEntity automatiktuer,344.3,0,75.5
   EntityTexture automatiktuer, tex
   
End Function


Function Animation()

   If EntityDistance(main_cam,automatiktuer) < 10 And animation_zaehler=1 And Animating(automatiktuer)=0 Then
      anim_speed=1
      Animate automatiktuer,3,anim_speed,0,0 : PlaySound(tuer)
      animation_zaehler = animation_zaehler+1
   EndIf

   If EntityDistance(main_cam,automatiktuer) > 10 And animation_zaehler=2 And Animating(automatiktuer)=0 Then
      anim_speed=-1
      Animate automatiktuer,3,anim_speed,0,0 : PlaySound(tuer)

      animation_zaehler=1
   End If
   
End Function


Function UpdateCubemap(tex, camera, entity)
   tex_sz = TextureWidth(tex)
   ShowEntity camera
   HideEntity entity
   PositionEntity camera, EntityX#(entity), EntityY#(entity), EntityZ#(entity)
   CameraClsMode camera, False, True
   CameraViewport camera, 0, 0, tex_sz, tex_sz

   SetCubeFace tex, 0
   RotateEntity camera, 0, 90, 0
   RenderWorld
   CopyRect 0, 0, tex_sz, tex_sz, 0, 0, BackBuffer(), TextureBuffer(tex)

   SetCubeFace tex, 2
   RotateEntity camera, 0, - 90, 0
   RenderWorld
   CopyRect 0, 0, tex_sz, tex_sz, 0, 0, BackBuffer(), TextureBuffer(tex)

   ShowEntity entity
   HideEntity camera
End Function

Angelo

BeitragSa, Mai 09, 2009 1:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Also AntiAlias = 1 kannst du schonmal bei den neuen Grafiktreibern vergessen.
Ich würde einfach einen counter benutzen und sagen wir mal

Code: [AUSKLAPPEN]
While Not KeyDown(1)
   cubetimer=cubetimer+1
   If cubetimer>5 Then cubetimer=0
   


   UpdateCubemap(cubemap, cubecam, box,cubetimer)

   RenderWorld
   Flip
Wend





Function UpdateCubemap(tex, camera, entity,timer)
   tex_sz = TextureWidth(tex)
   ShowEntity camera
   HideEntity entity
   PositionEntity camera, EntityX#(entity), EntityY#(entity), EntityZ#(entity)
   CameraClsMode camera, False, True
   CameraViewport camera, 0, 0, tex_sz, tex_sz
   If timer=0 Then
         SetCubeFace tex, 0
         RotateEntity camera, 0, 90, 0
        RenderWorld
        CopyRect 0, 0, tex_sz, tex_sz, 0, 0, BackBuffer(), TextureBuffer(tex)
   EndIf
   
   If timer=1 Then
         SetCubeFace tex, 1
         RotateEntity camera, 0, 0, 0
         RenderWorld
         CopyRect 0, 0, tex_sz, tex_sz, 0, 0, BackBuffer(), TextureBuffer(tex)
   EndIf
   
   If timer=2 Then
         SetCubeFace tex, 2
         RotateEntity camera, 0, - 90, 0
         RenderWorld
         CopyRect 0, 0, tex_sz, tex_sz, 0, 0, BackBuffer(), TextureBuffer(tex)
   EndIf
   
   If timer=3 Then
         SetCubeFace tex, 3
         RotateEntity camera, 0, 180, 0
         RenderWorld
         CopyRect 0, 0, tex_sz, tex_sz, 0, 0, BackBuffer(), TextureBuffer(tex)
   EndIf
   
   If timer=4 Then
         SetCubeFace tex, 4
         RotateEntity camera, - 90, 0, 0
         RenderWorld
         CopyRect 0, 0, tex_sz, tex_sz, 0, 0, BackBuffer(), TextureBuffer(tex)
   EndIf
   
   If timer=5 Then
         SetCubeFace tex, 5
         RotateEntity camera, 90, 0, 0
         RenderWorld
         CopyRect 0, 0, tex_sz, tex_sz, 0, 0, BackBuffer(), TextureBuffer(tex)
   EndIf
   
   ShowEntity entity
   HideEntity camera
End Function


dann müsste er bei jedem renderdurchgang ein cubebild rendern.
Alles was ich sagen kann, können auch andere ^^

Xaymar

ehemals "Cgamer"

BeitragSa, Mai 09, 2009 10:44
Antworten mit Zitat
Benutzer-Profile anzeigen
die textur ist ja halbwegs winzig(256x256). besitzt du eine onboard graka? oder sind deine levels/wasauchimmer highpoly? weil so eine kleine cubemap hat nichtmal meine alte ati(die sehr alt war) in die knie gezwungen...

kannst du mal ne demo/exe erstellen?
Warbseite
 

smeagle24

BeitragSa, Mai 09, 2009 14:21
Antworten mit Zitat
Benutzer-Profile anzeigen
Cgamer hat Folgendes geschrieben:
die textur ist ja halbwegs winzig(256x256). besitzt du eine onboard graka?


Ne hab keine onboard graka hab ne Radeon 9200 mit 128MB. Meine Levels, bzw. Modelle sind auch nicht highpoly und warum sollte die Cubemap grösser sein? Is ja nur für die Scheibe von ner Tür gedacht und da reicht das doch vollkommen.
Hier habe ich mal ne exe erstellt und hochgeladen:
https://www.blitzforum.de/upload/file.php?id=5482

Hallo Angelo.
Habe das mal probiert mit nem Timer. Bringt aber nicht wirklich viel. Die Framerate geht zwar rauf bis auf über 30, sobald ich dann aber ein paar modelle lade, geht sie wider runter. Teilweise sogar bis auf 3.

Nicdel

BeitragSa, Mai 09, 2009 14:39
Antworten mit Zitat
Benutzer-Profile anzeigen
Brauchst du wirklich eine Cubemap nur für eine Tür? Mit dem System in der Signatur läufts flüssig mit 50 FPS mindestens.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7

Xaymar

ehemals "Cgamer"

BeitragSa, Mai 09, 2009 19:51
Antworten mit Zitat
Benutzer-Profile anzeigen
50fps. plus cubemap die man falsch rendert ists kein wunder dasses in die knie geht(frag mich nicht wieso aber "Arial" auf ner cubemap zu sehen ist horror. und vorallem wenn einem "(START)" anguckt;)
Warbseite
 

smeagle24

BeitragSa, Mai 09, 2009 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Cgamer hat Folgendes geschrieben:
50fps. plus cubemap die man falsch rendert ists kein wunder dasses in die knie geht(frag mich nicht wieso aber "Arial" auf ner cubemap zu sehen ist horror. und vorallem wenn einem "(START)" anguckt;)

Das is mein aller erster Versuch mit Cubemap überhaupt. In der Sache bin ich der totale "noob".
Kann mir einer sagen, was da beim rendern falsch läuft, wo hab ich hier denn nen Fehler gemacht?
Was bitte meinst du mit "Arial auf ner Cubemap zu sehen ist horror"?

Nicdel

BeitragSa, Mai 09, 2009 21:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau dir mal das Beispiel bei SetCubeFace an.
Desktop: Intel Pentium 4 2650 Mhz, 2 GB RAM, ATI Radeon HD 3850 512 MB, Windows XP
Notebook: Intel Core i7 720 QM 1.6 Ghz, 4 GB DDR3 RAM, nVidia 230M GT, Windows 7
 

smeagle24

BeitragSa, Mai 09, 2009 22:43
Antworten mit Zitat
Benutzer-Profile anzeigen
Danke für den Hinweis. Jetzt hab ichs gesehen. Hab ausversehen Rechts und links anstelle von vorne und hinten gerendert. Jetzt komm ich auch auf 50 Frames pro Sekunde. Vielen Dank.

Xaymar

ehemals "Cgamer"

BeitragSo, Mai 10, 2009 13:34
Antworten mit Zitat
Benutzer-Profile anzeigen
smeagle24 hat Folgendes geschrieben:
Cgamer hat Folgendes geschrieben:
50fps. plus cubemap die man falsch rendert ists kein wunder dasses in die knie geht(frag mich nicht wieso aber "Arial" auf ner cubemap zu sehen ist horror. und vorallem wenn einem "(START)" anguckt;)

Das is mein aller erster Versuch mit Cubemap überhaupt. In der Sache bin ich der totale "noob".
Kann mir einer sagen, was da beim rendern falsch läuft, wo hab ich hier denn nen Fehler gemacht?
Was bitte meinst du mit "Arial auf ner Cubemap zu sehen ist horror"?


damit meinte ich das ich die schriftart "Arial" auf der cubemap sah. plus meinen start button
Warbseite

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group