cubemap rendering probleme

Übersicht BlitzBasic Blitz3D

Neue Antwort erstellen

 

mevsmp

Betreff: cubemap rendering probleme

BeitragMo, Apr 16, 2007 15:13
Antworten mit Zitat
Benutzer-Profile anzeigen
Ich möchte dass bei jedem Schleifendurchgang eine Seite der Cubemap gerendert wird. Das habe ich mit goto versucht. Jedoch wird nur ca. die Hälfte gerendert und die andere nicht.. Es muss an einem falschen goto sprung liegen. Bin ich blind? Ich sehe keinen Fehler..

Code: [AUSKLAPPEN]
   rendertime=rendertime+1
   If rendertime=7 Then rendertime=1
   
   
   If rendertime=2 Then Goto render2
   If rendertime=3 Then Goto render3
   If rendertime=4 Then Goto render4
   If rendertime=5 Then Goto render5
   If rendertime=6 Then Goto render6
   
   
   SetCubeFace texW,0
   RotateEntity cube_cam,0,90,0
   RenderWorld
   CopyRect 0,0,tex_size,tex_size,0,0,BackBuffer(),TextureBuffer(texW)
   Goto endrender
   
   .render2
    SetCubeFace texW,1
   RotateEntity cube_cam,0,0,0
   RenderWorld
   CopyRect 0,0,tex_size,tex_size,0,0,BackBuffer(),TextureBuffer(texW)
   Goto endrender
   
   .render3
   SetCubeFace texW,2
   RotateEntity cube_cam,0,-90,0
   RenderWorld
   CopyRect 0,0,tex_size,tex_size,0,0,BackBuffer(),TextureBuffer(texW)
   Goto endrender
   
   .render4
   SetCubeFace texW,3
   RotateEntity cube_cam,0,180,0
   RenderWorld
   CopyRect 0,0,tex_size,tex_size,0,0,BackBuffer(),TextureBuffer(texW)
   Goto endrender
   
   .render5
   SetCubeFace texW,4
   RotateEntity cube_cam,-90,0,0
   RenderWorld
   CopyRect 0,0,tex_size,tex_size,0,0,BackBuffer(),TextureBuffer(texW)
   
   .render6
   SetCubeFace texW,5
   RotateEntity cube_cam,90,0,0
   RenderWorld
   CopyRect 0,0,tex_size,tex_size,0,0,BackBuffer(),TextureBuffer(texW)
   
   .endrender
  • Zuletzt bearbeitet von mevsmp am Do, Apr 19, 2007 17:27, insgesamt einmal bearbeitet
 

Dreamora

BeitragMo, Apr 16, 2007 15:29
Antworten mit Zitat
Benutzer-Profile anzeigen
Das Problem ist nicht goto sondern deine Rotationen.
Denn du renderst zwar 6 Faces, rotierst aber nur um 2 Achsen, womit du nur 4 Faces abdecken kannst. Für oben/unten musst du um die 3te Achse auch drehen.

Es hat (oder hatte zumindest) in den Samples ein Beispiel wo man das übrigens auch mit lesbaren und nicht grausigem (Goto für etwas was mit IF oder Select gemacht wird in sauberem Code) sieht Smile
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.

StepTiger

BeitragMo, Apr 16, 2007 15:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Ist es Absicht, dass, wenn 5 gerendert wird, auch 6 gerendert wird?
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

mevsmp

BeitragMo, Apr 16, 2007 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
okay danke, aber in meinem fall handelt es sich um wasser. Brauche ich ich dazu auch "unten"? Denn ohne dem ganzen goto zeugs funktioniert es einwandfrei, nur wird halt 6 mal pro durchgang gerendert deswegen goto..
und wo finde ich dieses sample? Im blitz sample ordner scheint es nicht zu sein.

StepTiger

BeitragMo, Apr 16, 2007 15:45
Antworten mit Zitat
Benutzer-Profile anzeigen
wieso gehe ich nur davon aus, dass du die variable nicht global hast und du es in eine funktion gepresst hast? =)
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

Dreamora

BeitragMo, Apr 16, 2007 15:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Dann ist es wohl mit der neuen Version nimmer drin (weiss nicht warum BRL bei 1.64 samples drin hat die in der 1.9 net existieren und umgekehrt)

Meine Aussage oben stimmt so auch net, du renderst natürlich alle Seiten die notwendig sind.

Und wenn du Updaten willst musst du sowieso, speziell bei Wasser, alle neu rendern. Sonst wird die Cubemap recht interessante Resultate liefern.
Bestenfalls unten könntest du weg lassen aber nur wenn man nicht in dein Wasser rein können kommen sollte. (wenn du jedoch dafür sorgst dass die Cam nur in der Auflösung der Textur rendert, sollte das nicht wirklich soo ein schlimmer problem sein. Wenn doch: DX7dll und Render2Texture nehmen ^^)

Was du aber machen kannst ist den Update der Reflektionen nicht jeden Renderdurchlauf zu machen sondern nur wenn sich ausreichend viel verändert hat um in den Reflektionen eine Differenz zu sehen.
Das bringt eigentlich bedeutend mehr als nur selektiv Cubefaces zu aktualiseren, womit du riskierst das bei den übergängen der Cubeseiten auf dem Wasser Probleme enstehen.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

mevsmp

BeitragMo, Apr 16, 2007 15:52
Antworten mit Zitat
Benutzer-Profile anzeigen
das schließe ich aus StepTiger Smile

ich habs jetzt nochmal mit IF gemacht, keine ahnung warum ich es dovor so kompliziert haben wollte^^. Trotzdem funktioniert es genauso wie vorher, also muss es wie Dreamora gesagt hat, an der Rotation liegen.
Aber wieso funktioniert es dann wenn ich alles in einem Durchgang 6 mal rendern lasse??
Und um nochmal auf das Problem zurückzukommen: Wie muss ich es denn jetzt drehen damit es funktioniert?

Code: [AUSKLAPPEN]
   rendertime=rendertime+1
   If rendertime=7 Then rendertime=1
   
   
   
If rendertime=1
   SetCubeFace texW,0
   RotateEntity cube_cam,0,90,0
   RenderWorld
   CopyRect 0,0,tex_size,tex_size,0,0,BackBuffer(),TextureBuffer(texW)
EndIf

   
If rendermode=2
    SetCubeFace texW,1
   RotateEntity cube_cam,0,0,0
   RenderWorld
   CopyRect 0,0,tex_size,tex_size,0,0,BackBuffer(),TextureBuffer(texW)
EndIf

   
If rendermode=3
   SetCubeFace texW,2
   RotateEntity cube_cam,0,-90,0
   RenderWorld
   CopyRect 0,0,tex_size,tex_size,0,0,BackBuffer(),TextureBuffer(texW)
EndIf

   
If rendermode=4
   SetCubeFace texW,3
   RotateEntity cube_cam,0,180,0
   RenderWorld
   CopyRect 0,0,tex_size,tex_size,0,0,BackBuffer(),TextureBuffer(texW)
EndIf

   
If rendermode=5
   SetCubeFace texW,4
   RotateEntity cube_cam,-90,0,0
   RenderWorld
   CopyRect 0,0,tex_size,tex_size,0,0,BackBuffer(),TextureBuffer(texW)
EndIf

If rendermode=6
   SetCubeFace texW,5
   RotateEntity cube_cam,90,0,0
   RenderWorld
   CopyRect 0,0,tex_size,tex_size,0,0,BackBuffer(),TextureBuffer(texW)
EndIf

StepTiger

BeitragMo, Apr 16, 2007 16:12
Antworten mit Zitat
Benutzer-Profile anzeigen
Also für mich sieht es sehr richtig aus.

Es KANN irgendwie nur an sowas liegen. Sonst würde es nicht bei allen Seiten funktionieren!
Noch gestern standen wir am Abgrund, doch heute sind wir schon einen Schritt weiter.
Computer:
AMD Sempron 3000+; ATI Radeon 9800 Pro; 512 MB DDR RAM 400Mhz; Asus E7N8X-E Deluxe; Samsung 200GB HD 5.4ns acces t
Gewinner: BP Code Compo #2
Π=3.141592653589793238...<--- und das aus dem kopf Laughing
Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser.
 

mevsmp

BeitragMo, Apr 16, 2007 16:40
Antworten mit Zitat
Benutzer-Profile anzeigen
Dreamora hat Folgendes geschrieben:


Was du aber machen kannst ist den Update der Reflektionen nicht jeden Renderdurchlauf zu machen sondern nur wenn sich ausreichend viel verändert hat um in den Reflektionen eine Differenz zu sehen.


Wie soll das denn bitte gehen?

ich habs immer so gemacht:



Code: [AUSKLAPPEN]
update_cubewater=update_cubewater+1
If update_cubewater=5
   
   cubemap()
   
   update_cubewater=0
   
EndIf


Er rendert also nach jedem 5. Schleifendurchgang. Dashat aber einen unschönen ruckel-effekt da 4 durchgänge schneller laufen als dann der 5. (da beim 5. durchgang 6 mal gerendert wird) und deswegen kommt es zum stottern.

Dies ist der Grund warum ich in jedem durchgang eine Seite rendern wollte.
Gibt es noch andere Methoden?
 

Dreamora

BeitragMo, Apr 16, 2007 23:09
Antworten mit Zitat
Benutzer-Profile anzeigen
hmm, stottern? also wenn das system so schwach ist das es mit flip true auf 60 / 72hz das net so handhaben kann solltest du den effekt eventuell erst mal raus lassen und dich um die wichtigen dinge kümmern denn dann kannst du davon ausgehen das für den effekt eh keine rest rechenzeit übrig sein wird mit content und net nur eye candy.
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen.
 

mevsmp

BeitragDo, Apr 19, 2007 16:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,

ich konnte mein Problem immer noch nicht lösen - auch wenn ich nicht weiß warum alle Versuche scheitern. Warum zum Beispiel funktioniert das untere Beispiel nicht?
Rein von dern Logik sollte es genauso funktionieren wie die "normalen" cube-map codes. Aber nein. Auß irgendeinem Grund wird nur eine Seite gerendert...
In der OH steht ja auch man sollte lieber pro frame nur eine seite rendern. Aber WIE?

Code: [AUSKLAPPEN]
   face_num#=face_num#+1
   If face_num#=5 Then face_num#=0
   
   
   
   If face_num#=0
      RotateEntity cube_cam,0,90,0
   EndIf
   If face_num#=1
      RotateEntity cube_cam,0,0,0
   EndIf
   If face_num#=2
      RotateEntity cube_cam,0,-90,0
   EndIf
   If face_num#=3
      RotateEntity cube_cam,0,180,0
   EndIf
   If face_num#=4
      RotateEntity cube_cam,-90,0,0
   EndIf
   
   SetCubeFace tex,face_num#
   RenderWorld
   CopyRect 0,0,tex_size,tex_size,0,0,BackBuffer(),TextureBuffer(tex)   

Neue Antwort erstellen


Übersicht BlitzBasic Blitz3D

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group