cubemap rendering probleme
Übersicht BlitzBasic Blitz3D
mevsmpBetreff: cubemap rendering probleme |
Mo, Apr 16, 2007 15:13 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Apr 16, 2007 15:29 Antworten mit Zitat |
|
---|---|---|
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 |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
StepTiger |
Mo, Apr 16, 2007 15:37 Antworten mit Zitat |
|
---|---|---|
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 Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
mevsmp |
Mo, Apr 16, 2007 15:40 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Apr 16, 2007 15:45 Antworten mit Zitat |
|
---|---|---|
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 Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
Dreamora |
Mo, Apr 16, 2007 15:49 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Apr 16, 2007 15:52 Antworten mit Zitat |
|
---|---|---|
das schließe ich aus StepTiger
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 |
Mo, Apr 16, 2007 16:12 Antworten mit Zitat |
|
---|---|---|
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 Seit der Earthlings-Diskussion überzeugter Fleisch(fr)esser. |
mevsmp |
Mo, Apr 16, 2007 16:40 Antworten mit Zitat |
|
---|---|---|
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 |
Mo, Apr 16, 2007 23:09 Antworten mit Zitat |
|
---|---|---|
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 |
Do, Apr 19, 2007 16:46 Antworten mit Zitat |
|
---|---|---|
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) |
||
Übersicht BlitzBasic Blitz3D
Powered by phpBB © 2001 - 2006, phpBB Group