Seite 2 von 2
Re: Performance erhöhen
Verfasst: 11.06.2010 19:08
von STARGÅTE
eine der ungeahnte Möglichkeiten ist hier zu sehen:
Fraktale
Dort habe ich auch mit CustomFilterCallback() ein CallBack geschrieben der mir halt zB die Mandelbrotmenge erzeugt.
Und das nicht einfach nur so, sonden auch mit einem netten Farbeffekt.
Aber du hast recht, CustomFilterCallback() ist ein sehr mächtiges Werkzeug.
EDIT: Vorallem weil man ja nicht nur immer n BOX zeichen muss, sonden auch Texte und Schriften...
Re: Performance erhöhen
Verfasst: 11.06.2010 19:29
von DarkDragon
Nur so nebenbei, wer mit CustomFilterCallback klarkommt kommt auch mit Shadern klar. Dadurch lässt sich das ganze noch sehr beschleunigen.
Re: Performance erhöhen
Verfasst: 11.06.2010 19:43
von PureLust
DarkDragon hat geschrieben:Nur so nebenbei, wer mit CustomFilterCallback klarkommt kommt auch mit Shadern klar. Dadurch lässt sich das ganze noch sehr beschleunigen.
Meinst Du mit Shadern das "direkte programmieren des Grafikchips"?
[Edit:]
STARGÅTE hat geschrieben:Vorallem weil man ja nicht nur immer n BOX zeichen muss, sonden auch Texte und Schriften...
Jupp, da kommt mir sofort in den Sinn, dies bei der Generierung bestimmter Druckerausgaben zu verwenden, um z.B. Toner und Tinte einzusparen (also um z.B. nur jeden 2. Pixel schwarz zu machen).

Re: Performance erhöhen
Verfasst: 12.06.2010 01:51
von Christian H
STARGÅTE hat geschrieben:Hier mal meine "Version", wie man ein Potentialfeld darstellen kann, in dem 10 Ladungen vertielt sind (positiv und negativ)
Noch einen Gamma Filter dazu und schon ist es Ästhetisch ansprechend.
Code: Alles auswählen
Enumeration
#Window : #Gadget : #Image
EndEnumeration
#x = 64
#y = 64
Structure Ladung
x.f : y.f : q.f
EndStructure
Global NewList Ladung.Ladung()
; Ladungen erstellen
RandomSeed(6)
For n = 1 To 10
AddElement(Ladung())
Ladung()\x = Random(#x) ;-20)+10
Ladung()\y = Random(#y) ;-20)+10
Ladung()\q = 255*(Random(1)*2-1)
Next
; Potentialfeld
Procedure Ladungen(x, y, QuellFarbe, ZielFarbe)
Protected q.f, qi.f
ForEach Ladung() : With Ladung()
qi = \q / Sqr((x-\x)*(x-\x)+(y-\y)*(y-\y))
q + qi
EndWith : Next
;Debug q
Color = RGB(0,255,0)
If q <= 255
If q >= 0
Color = RGB(0,q,0)
ElseIf q >= -255
Color = RGB(-q,0,0)
Else
Color = RGB(255,0,0)
EndIf
EndIf
r = Pow(( Red(Color)/255),0.5)*255
g = Pow((Green(Color)/255),0.8)*255
;b = Pow(( Blue(Color)/255),0.8)*255
Color = RGB(r,g,b)
ProcedureReturn Color
EndProcedure
CreateImage(#Image, #x, #y, 24)
StartDrawing(ImageOutput(#Image))
DrawingMode(#PB_2DDrawing_CustomFilter)
CustomFilterCallback(@Ladungen())
Box(0,0,#x,#y)
StopDrawing()
ResizeImage(#Image, 512, 512)
SetClipboardImage(#Image)
OpenWindow(#Window, 0, 0, ImageWidth(#Image), ImageHeight(#Image), "Image", #PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
ImageGadget(#Gadget, 0, 0, ImageWidth(#Image), ImageHeight(#Image), ImageID(#Image))
Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
Gruß Christian
PS: @PureLust
Gammafilter und Co. sind Sinnvolle Anwendungen für CustomFilterCallback()