Blur Effekte
Übersicht BlitzBasic Codearchiv
FireballFlame |
So, Nov 26, 2006 2:57 Antworten mit Zitat |
|
---|---|---|
Tja, also "graphicsheight()/graphicswidth" funzt definitiv nicht ^^
Ich hab schon diverse Varianten durchprobiert, wie: "768/graphicswidth", oder ".75*(1/((graphicsheight()/graphicswidth())/.75))", oder was weiß ich Black Spider hat Folgendes geschrieben: Allerdings wer benutzt schon auflösungen in seinem Spiel die nicht 4/3 entsprechen
Notebook-Besitzer zum Beispiel ^^ (ich meine nicht mich) |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
Goodjee |
So, Nov 26, 2006 11:17 Antworten mit Zitat |
|
---|---|---|
versuch es mal mit float(height/width) | ||
"Ideen sind keine Coladosen, man kann sie nicht recyclen"-Dr. House
http://deeebian.redio.de/ http://goodjee.redio.de/ |
BladeRunnerModerator |
So, Nov 26, 2006 11:27 Antworten mit Zitat |
|
---|---|---|
float(height*1.0/width) | ||
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 |
So, Nov 26, 2006 11:52 Antworten mit Zitat |
|
---|---|---|
Goodjee: deines bringt nichts, dort wird erst int division gemacht und dann zurück gegeben.
Blade: Warum nicht einfach float(height)/width ^^ |
||
Ihr findet die aktuellen Projekte unter Gayasoft und könnt mich unter @gayasoft auf Twitter erreichen. |
BladeRunnerModerator |
So, Nov 26, 2006 12:04 Antworten mit Zitat |
|
---|---|---|
Persönlicher Stil nehm ich an. Hab ich mir so angewöhnt. | ||
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 |
Christoph |
So, Nov 26, 2006 12:59 Antworten mit Zitat |
|
---|---|---|
ich schreibe immer:
Code: [AUSKLAPPEN] bla/(bla2*1.0)
|
||
Black Spider |
So, Nov 26, 2006 15:16 Antworten mit Zitat |
|
---|---|---|
also Float(res_y*1.0/res_x) und res_y/(res_x*1.0) funktionieren hervorragend;
allerdings nur bei 4/3! Hab mal ne Auflösung von 1280*768 eingestellt, und yxratio müsste dann 0.6 sein. Aber selbst wenn man 0.6 einstellt kommt etwas komisches bei raus... ... moment ... ABER: es funktioniert, wenn man an den Fine-tuning werten rumspielt. Bei einer Auflösung von 1280*768 geht es, man muss man muss das hier eingeben: Code: [AUSKLAPPEN] posfinetuney# = -.30083
und jetzt nochmal voll: Code: [AUSKLAPPEN] ;--- Blur Lib von Black Spider, verbessert von FireballFlame, und dann nochmal von Black Spider ^^ --- Global RES_X = 800;1280 ; <- Bildschirmauflösung Global RES_Y = 600;768 Graphics3D res_x,res_y,32,1 SetBuffer BackBuffer() HidePointer() Type blur Field spr Field tex Field art# End Type .start sv = sv + 1 Global cam = CreateCamera() Select sv Case 1 ;Normaler Blur CameraClsColor cam,200,200,200 CreateBlurCam(cam,2.0005,2.0005,2.0005,.7,1) Case 2 ;Soften Delete First blur CameraClsColor cam,0,0,0 CreateBlurCam(cam,2.0,2.005,2.005,.6,1) Case 3 ;Zoom + Black Hole Delete First blur CameraClsColor cam,200,200,200 CreateBlurCam(cam,2.0,2.7,2.7,.5,2) Case 4 ;Blur Fragmente Delete First blur CameraClsColor cam,255,255,255 CreateBlurCam(cam,2.0,2.485,2.495,.3,1) Case 5 End End Select lit = CreateLight() Dim cube(90) For lol = 0 To 90 cube(lol) = CreateCube() PositionEntity cube(lol),Rnd(-20,20),Rnd(-20,20),Rnd(-20,20) ScaleEntity cube(lol),Rnd(2),Rnd(2),Rnd(2) EntityColor cube(lol),Rnd(255),Rnd(255),Rnd(255) Next While Not(KeyHit(1)) TurnEntity cam,(MouseYSpeed()/3),-MouseXSpeed()/3,0 For lol = 0 To 90 TurnEntity cube(lol),.2,.2,.2 Next If KeyHit(17) Or KeyHit(57) Then lll = 1 - lll If sv = 3 Then CameraZoom cam,1.5-lll UpdateWorld RenderWorld UpdateBlur(res_x,res_y,lll) Flip Wend ClearWorld 1,1,1 Goto start Function CreateBlurCam(camera,Strk#,scx#,scy#,alpha#,blend) blur.Blur = New Blur btgraphw# = res_x btgraphh# = res_y yxratio# = Float(res_y*1.0/res_x) pf=0 Repeat pf = pf + 1 texsize# = 2^pf Until texsize >= btgraphw blur\tex = CreateTexture(texsize,texsize,256) ScaleTexture blur\tex,texsize/btgraphw,(yxratio*texsize)/btgraphh blur\art = strk blur\spr = CreateSprite(camera) posfinetunex# = .00195 If yxratio = .75 Then posfinetuney# = .00183 If yxratio = .6 Then posfinetuney# = -.30083 PositionEntity blur\spr,0-posfinetunex,-.5+posfinetuney,blur\art EntityOrder blur\spr,-999 ScaleSprite blur\spr,scx,scy EntityTexture blur\spr,blur\tex EntityAlpha blur\spr,alpha TextureBlend blur\tex,blend End Function Function UpdateBlur(ghei, gwid, blur_on) For blur.Blur = Each Blur If blur_on = 1 Then ShowEntity blur\spr CopyRect 0 , 0 , ghei , gwid , 0 ,0 , BackBuffer() , TextureBuffer(blur\tex) Else HideEntity blur\spr End If Next End Function mein PC lässt nicht viel mehr auflösungen zu, ausser 4/3 und dem wo .6 rauskommt, wenn´s noch mehr gibt, so kann ja jemand die posfinetuney liste erweitern. So funktionierts jetzt jedenfalls. Danke an Fireball Flame! [Edit] und natürlich auch an alle anderen ^^ |
||
Coming soon:
http://img132.imageshack.us/im...im2ab6.gif |
FireballFlame |
So, Nov 26, 2006 15:40 Antworten mit Zitat |
|
---|---|---|
Hm ja, seltsam.
Das "Finetuning" hab ich eingeführt, weil irgendwie immer leicht nach unten rechts geblurt wurde o.O Ich kann mir übrigens nicht erklären, warum... das Sprite steht doch mittig vor der Kamera und so?! Formate gibts noch mehr... mein PC unterstützt zum Beispiel: 1152x720 1152x864 1152x870 1152x900 Wenn ich Zeit hab, mach ich das Finetuning mal für die noch... €: Hatte es vergessen, werds in wenigen Tagen (Anfang Januar, wenn ich wieder an meinen richtigen Pc komme) mal updaten ^^ |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
FireballFlame |
Fr, Jan 05, 2007 21:56 Antworten mit Zitat |
|
---|---|---|
UPDATE!
Puaaaaah!!!! Der Effekt funktioniert jetzt endlich mit allen "Bildschirmformaten" (x-Auflösung : y-Auflösung), die mein Computer unterstützt ... 13 Stück. Ich steh nach wie vor aufm Schlauch und find keine Formel, mit der man das "Feintuning" errechnen könnte ... also hab ich die durch Probieren rausbekommen... nen halben Tag hab ich damit verbracht o.O Außerdem hab ich noch so einige Sachen gemacht - siehe Anleitung bzw. Demo ^^ Diesen Code bitte in einer Datei namens "Blur.bb" speichern! Code: [AUSKLAPPEN] ;--- Blur Lib von Black Spider und FireballFlame (sozusagen ^^) --- Global btgraphw#,btgraphh# Global posfinetunex#,posfinetuney# Global texsize# Type blur Field bcam Field spr Field tex Field balpha# End Type Function CreateBlur(camera,alpha#,dirx#=0,diry#=0,scx#=1,scy#=1,clscolor_r=0,clscolor_g=0,clscolor_b=0) Local bcheck.Blur For bcheck=Each blur If bcheck\bcam=camera RemoveBlur(camera) Next btgraphw = GraphicsWidth() btgraphh = GraphicsHeight() yxratio# = Float(btgraphh*1.0/btgraphw) res_supported=1 Select yxratio Case .75 posfinetunex = .00196 posfinetuney = .00196 Case .6 posfinetunex = .0016 posfinetuney = -.29845 Case .625 posfinetunex = .00175 posfinetuney = -.24825 Case 145./192 posfinetunex = .00175 posfinetuney = .01215 Case .78125 posfinetunex = .00175 posfinetuney = .06425 Case .8 posfinetunex = .00158 posfinetuney = .10155 Case .5625 posfinetunex = .00125 posfinetuney = -.37374 Case .64 posfinetunex = .00125 posfinetuney = -.21875 Case 27./43 posfinetunex = .00115 posfinetuney = -.243 Case 259./960 posfinetunex = .00108 posfinetuney = -.95936 Case 5./9 posfinetunex = .0028 posfinetuney = -.3861 Case 2./3 posfinetunex = .0028 posfinetuney = -.1639 Case 32./51 posfinetunex = .00165 posfinetuney = -.24346 Default res_supported=0 End Select If res_supported=0 Return blur.Blur = New Blur blur\bcam = camera blur\balpha = alpha pf=0 scx=2*scx:scy=2*scy Repeat pf = pf + 1 texsize = 2^pf Until texsize >= btgraphw blur\tex = CreateTexture(texsize,texsize,256) origbuffer=GraphicsBuffer() SetBuffer TextureBuffer(blur\tex) Color clscolor_r,clscolor_g,clscolor_b Rect 0,0,texsize,texsize,1 SetBuffer origbuffer ScaleTexture blur\tex,texsize/btgraphw,(yxratio*texsize)/btgraphh blur\spr = CreateSprite(blur\bcam) PositionEntity blur\spr,0-posfinetunex+dirx,-.5+posfinetuney+diry,2 EntityOrder blur\spr,-999 ScaleSprite blur\spr,scx,scy EntityTexture blur\spr,blur\tex EntityAlpha blur\spr,blur\balpha End Function Function UpdateBlur(intens#=1) For blur.Blur = Each Blur If intens=0 Or blur\balpha=0 HideEntity blur\spr Else ShowEntity blur\spr EntityAlpha blur\spr,blur\balpha*intens CopyRect 0,0,btgraphw,btgraphh,0,0,BackBuffer(),TextureBuffer(blur\tex) End If Next End Function Function RemoveBlur(camera) found=0 Local bdel.Blur For bdel=Each blur If bdel\bcam=camera FreeTexture bdel\tex FreeEntity bdel\spr Delete bdel found=1 End If If found Exit Next End Function Function RemoveAllBlurs() Local bdelall.Blur For bdelall=Each blur FreeTexture bdelall\tex FreeEntity bdelall\spr Delete bdelall Next End Function Function ChangeBlurAlpha(camera,alpha#) found=0 Local bchg.Blur For bchg=Each blur If bchg\bcam=camera bchg\balpha=alpha found=1 End If If found Exit Next End Function Function ChangeBlurDirection(camera,dirx#,diry#) found=0 Local bchg.Blur For bchg=Each blur If bchg\bcam=camera PositionEntity bchg\spr,0-posfinetunex+dirx,-.5+posfinetuney+diry,2 found=1 End If If found Exit Next End Function Function ChangeBlurScale(camera,scx#,scy#) found=0 Local bchg.Blur For bchg=Each blur If bchg\bcam=camera ScaleSprite bchg\spr,2*scx,2*scy found=1 End If If found Exit Next End Function Function ChangeBlurClsColor(camera,clscolor_r,clscolor_g,clscolor_b) found=0 Local bchg.Blur For bchg=Each blur If bchg\bcam=camera origbuffer=GraphicsBuffer() SetBuffer TextureBuffer(bchg\tex) Color clscolor_r,clscolor_g,clscolor_b Rect 0,0,texsize,texsize,1 SetBuffer origbuffer found=1 End If If found Exit Next End Function Folgenden Code bitte in einer anderen Datei, z.B. "Blur Demos.bb", im selben Verzeichnis speichern! Und dann ausführen! Code: [AUSKLAPPEN] Global RES_X = 1024 ; <- Bildschirmauflösung / Screen resolution
Global RES_Y = 768 Graphics3D res_x,res_y,32,1 SetBuffer BackBuffer() HidePointer() SeedRnd 20 Include "Blur.bb" .start sv = sv + 1 Global cam = CreateCamera() Select sv Case 1 ;Motion Blur display_text 1,"Motion Blur" CameraClsColor cam,200,200,200 CreateBlur(cam,.8,0,0,1.00,1.00,200,200,200) Case 2 ;Soften display_text 2,"Soften" CameraClsColor cam,0,0,0 CreateBlur(cam,.6,0,0,1.0025,1.0025) Case 3 ;Blur to Center display_text 3,"Blur to Center" CameraClsColor cam,50,50,50 CreateBlur(cam,.7,0,.005,.99,.99,50,50,50) Case 4 ;Directional Blur display_text 4,"Directional Blur (changing direction)" CameraClsColor cam,0,0,0 CreateBlur(cam,.92,.01,-.01) Case 5 ;Zoom + Black Hole display_text 5,"Black Hole + CameraZoom" CameraClsColor cam,180,180,180 CreateBlur(cam,.5,0,0,1.35,1.35,180,180,180) Case 6 ;Blur Fragments display_text 6,"Blur Fragments (changing size)" CameraClsColor cam,255,255,255 CreateBlur(cam,.3,0,0,1.15,1.15,255,255,255) Case 7 ;Text & Images display_text 7,"Text / Images" CameraClsColor cam,0,0,0 CreateBlur(cam,.9,0,-.005) Case 8 End End Select lit = CreateLight() Dim cube(90) For lol = 0 To 90 cube(lol) = CreateCube() PositionEntity cube(lol),Rnd(-20,20),Rnd(-20,20),Rnd(-20,20) ScaleEntity cube(lol),Rnd(2),Rnd(2),Rnd(2) If sv=7 Then EntityColor cube(lol),0,0,0 Else EntityColor cube(lol),Rnd(255),Rnd(255),Rnd(255) Next lll=0:acounter#=300 While Not KeyHit(1) TurnEntity cam,(MouseYSpeed()/3),-MouseXSpeed()/3,0 For lol = 0 To 90 TurnEntity cube(lol),.2,.2,.2 Next If KeyHit(28) Or KeyHit(57) Then lll = 1 - lll acounter=(acounter+2) Mod 360 If sv = 4 Then ChangeBlurDirection cam,Cos(acounter)/50,Sin(acounter)/50 If sv = 5 Then CameraZoom cam,1.5-lll If sv = 6 Then ChangeBlurScale cam,1.15+Sin(2*acounter)/20,1.15+Sin(2*acounter+30)/20 UpdateWorld RenderWorld Color 200,50,0 If sv = 7 Then Text res_x/2,res_y/2-50,"TEXT WITH BLUR",1,1 UpdateBlur lll If sv = 7 Then Text res_x/2,res_y/2+50,"TEXT WITHOUT BLUR",1,1 Flip Wend RemoveAllBlurs ClearWorld 1,1,1 Goto start Function display_text(nr,dtext$) Cls:Flip:Cls Color 200,0,0 Delay 100 Text 20,20,"BLUR DEMO " + nr Text 20,22,"___________" Flip:Delay 50:Flip Text 30,50,dtext If nr=7 next_$="end)" Else next_$= "next effect)" Text 25,100,"(Mouse = turn camera, Space = blur, ESC = " + next_ Flip FlushKeys:WaitKey:FlushKeys End Function Anleitung: Die Benutzung ist einfach. Man muss zuerst natürlich die "Blur.bb" mit Include irgendwo in sein Programm einbinden. Um dann einer Kamera einen Blur-Effekt zuzuweisen, benutzt man die Funktion: CreateBlur camera,alpha# ,dirx#,diry#,scx#,scy#,clscolor_r,clscolor_g,clscolor_b camera ist dabei die Kamera, die den Effekt bekommen soll. alpha ist die Stärke des Effektes und kann zwischen 0 und 1 liegen: je höher der Wert, desto stärker "verwischt" das Bild. Alle weiteren Argumente sind optional, d.h. man kann sie auch weglassen: dirx und diry "verschieben" den Effekt und bewirken, dass in eine bestimmte Richtung geblurt wird. Standard ist 0 scx und scy "dehnen" den Effekt. Somit kann man horizontal und/oder vertikal zum Bildschirmrand (Werte > 1) oder zur Bildschirmmitte (Werte < 1) bluren. Standardwert ist natürlich 1. (Aus technischen Gründen ist die "Mitte" nicht wirklich die Bildschirmmitte. Das kann man aber mir diry korrigieren ^^) Bei clscolor_r, clscolor_g und clscolor_b schließlich sollte man die Hintergrundfarbe der Kamera angeben, also die Werte, die man bei dem Befehl CameraClsColor angegeben hat. Hat man diesen Befehl gar nicht benutzt, braucht man auch diese drei Argumente nicht mit anzugeben, denn der Standard ist 0,0,0. Damit der Blur-Effekt funktioniert, muss in der Programmschleife nach RenderWorld der Befehl UpdateBlur intens# stehen. Der optionale Wert intens ist ein Faktor für die Blurstärke (genau wie alpha# beim CreateBlur, aber global). Nützlich ist er z.B. um den Blur-Effekt zu deaktivieren ("UpdateBlur 0"), denn den Befehl UpdateBlur einfach wegzulassen würde zu Grafikfehlern führen. Hat man übrigens nach dem RenderWorld noch 2D-Befehle wie DrawImage oder Text, dann ist es wichtig, wo diese im Quelltext stehen: befinden sie sich vor dem UpdateBlur, werden sie mitgeblurt, stehen sie dahinter, dann nicht. Die Eigenschaften des Effektes kann man übrigens auch nachträglich noch verändern. Dazu stehen die Funktionen ChangeBlurAlpha(camera,alpha#), ChangeBlurDirection(camera,dirx#,diry#), ChangeBlurScale(camera,scx#,scy#) und ChangeBlurClsColor(camera,clscolor_r,clscolor_g,clscolor_b) zur Verfügung. Letztere ist verhältnismäßig langsam und sollte daher nicht in jedem Schleifendurchlauf aufgerufen werden ... aber wer wechselt schon andauernd den Kamerahintergrund... ^^ Um den Effekt für eine Kamera zu deaktivieren, gibt es die FunktionRemoveBlur(camera). Mit RemoveAllBlurs wird der Effekt von allen Kameras gelöscht. Hinweise: Es ist nicht möglich, einer Kamera mehrere Blur-Effekte zuzuweisen. Weist man einer Kamera, die schon einen hat, noch einen Blur-Effekt zu, wird der alte durch den neuen ersetzt. RemoveBlur und RemoveAllBlurs verursachen einen Fehler, wenn Sprite oder Textur nicht mehr vorhanden sind! (z.b. nach Graphics3D oder ClearWorld) Wendet man RemoveBlur auf eine "blur-lose" Kamera an, so geschieht nichts. Setzt man alpha bei CreateBlur oder intens bei UpdateBlur gleich null, "deaktiviert" das den Effekt. (=spart Rechenleistung) Versucht man, den Effekt bei einer nicht unterstützten Auflösung zu starten, passiert nichts. |
||
PC: Intel Core i7 @ 4x2.93GHz | 6 GB RAM | Nvidia GeForce GT 440 | Desktop 2x1280x1024px | Windows 7 Professional 64bit
Laptop: Intel Core i7 @ 4x2.00GHz | 8 GB RAM | Nvidia GeForce GT 540M | Desktop 1366x768px | Windows 7 Home Premium 64bit |
- Zuletzt bearbeitet von FireballFlame am Mi, März 14, 2007 14:38, insgesamt einmal bearbeitet
dav3d |
Mo, Jan 08, 2007 22:42 Antworten mit Zitat |
|
---|---|---|
Thx, sieht gut aus. Kann ich bestimmt brauchen. | ||
Todeskop |
Mo, Jan 08, 2007 22:45 Antworten mit Zitat |
|
---|---|---|
den effect kan man sehr gut einsetzen wenn man z.B. wie in Need for Speed Most wantde nen Speedbreaker macht, oder troubleshooting....
packs in meiner codesammlung!Danke! |
||
Laias |
Mo, Jan 15, 2007 16:01 Antworten mit Zitat |
|
---|---|---|
Kann das mal jemand kompilieren und hochladen?
Wäre toll weil ich freund der kein bb3d hat zeigen will und ich nur die Demo hab! |
||
http://laias.wordpress.com |
biggicekey |
Mo, Jan 15, 2007 16:59 Antworten mit Zitat |
|
---|---|---|
auf was für systemen habt ihr das getestet?
hab zurzeit nur nen 1,8ghz rechner mit geforce2mx und 256mb ram. da läuft das sehr stockend. auf meinem 2ghz geforce4mx 756mb ram lief zumindest jans_blurlib absolut problemlos. (diese kann ich nicht testen da pc kaputt) wie würdet ihr die minimalen systemanforderungen einschätzen? |
||
#45 www.icekeyunlimited.de www.starcrusade.de
Gewinner BCC#17 !!! mit dotkiller Nothing more to register - you've cleaned us out![/size] |
Laias |
Mo, Jan 15, 2007 17:11 Antworten mit Zitat |
|
---|---|---|
Mach mal in einer Auflösung von 800 mal 600 in Vollbild dann läufts auf fast allen! | ||
http://laias.wordpress.com |
Übersicht BlitzBasic Codearchiv
Powered by phpBB © 2001 - 2006, phpBB Group