Blur Effekte

Übersicht BlitzBasic Codearchiv

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen

FireballFlame

BeitragSo, Nov 26, 2006 2:57
Antworten mit Zitat
Benutzer-Profile anzeigen
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 Razz

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

BeitragSo, Nov 26, 2006 11:17
Antworten mit Zitat
Benutzer-Profile anzeigen
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/

BladeRunner

Moderator

BeitragSo, Nov 26, 2006 11:27
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Nov 26, 2006 11:52
Antworten mit Zitat
Benutzer-Profile anzeigen
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.

BladeRunner

Moderator

BeitragSo, Nov 26, 2006 12:04
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Nov 26, 2006 12:59
Antworten mit Zitat
Benutzer-Profile anzeigen
ich schreibe immer:

Code: [AUSKLAPPEN]
bla/(bla2*1.0)


Smile

Black Spider

BeitragSo, Nov 26, 2006 15:16
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragSo, Nov 26, 2006 15:40
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragFr, Jan 05, 2007 21:56
Antworten mit Zitat
Benutzer-Profile anzeigen
UPDATE! Cool


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

BeitragMo, Jan 08, 2007 22:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Thx, sieht gut aus. Kann ich bestimmt brauchen. Wink
 

Todeskop

BeitragMo, Jan 08, 2007 22:45
Antworten mit Zitat
Benutzer-Profile anzeigen
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! Very Happy
 

Laias

BeitragMo, Jan 15, 2007 16:01
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jan 15, 2007 16:59
Antworten mit Zitat
Benutzer-Profile anzeigen
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

BeitragMo, Jan 15, 2007 17:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Mach mal in einer Auflösung von 800 mal 600 in Vollbild dann läufts auf fast allen!
http://laias.wordpress.com

Gehe zu Seite Zurück  1, 2

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group