Blending

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

Blending

Beitrag von unix »

Hat jemand eine Idee wie man ein Blending wie ähnlich in diesen Bild(Auge)
http://phraseologie.free.fr/Copie%20de%20dragon.jpg
Programmieren, Malen oder andere möglichkeiten machen könnte?

Mein Problem ist das ungleichmäßige Verschwimmen der Farbe mit den Hintergrund

Am Liebsten Wäre mir ein Grafikprogramm das etwas derartiges kann
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
Kekskiller
Beiträge: 752
Registriert: 14.09.2004 21:39
Kontaktdaten:

Beitrag von Kekskiller »

Also ich hatte da mal sone schöne Funktion geschrieben...
#ScreenWidth=320
#ScreenHeight=240

Procedure PutPixel(x.w,y.w, ired.w,igre.w,iblu.w, t.f)
If x.w>=0 And y.w>=0 And x.w<#ScreenWidth And y.w<#ScreenHeight
ocol.l = Point(x.w,y.w)
ored.w = Red(ocol.l)
ogre.w = Green(ocol.l)
oblu.w = Blue(ocol.l)

If ored.w<ired.w
fred.w = ored.w + ( Abs(ored.w - ired.w) * t.f )
ElseIf ored.w>ired.w
fred.w = ired.w + ( Abs(ored.w - ired.w) * t.f )
ElseIf ored.w=ired.w
fred.w=ored.w
EndIf

If ogre.w<igre.w
fgre.w = ogre.w + ( Abs(ogre.w - igre.w) * t.f )
ElseIf ogre.w>igre.w
fgre.w = igre.w + ( Abs(ogre.w - igre.w) * t.f )
ElseIf ogre.w=igre.w
fgre.w=ogre.w
EndIf

If oblu.w<iblu.w
fblu.w = oblu.w + ( Abs(oblu.w - iblu.w) * t.f )
ElseIf oblu.w>iblu.w
fblu.w = iblu.w + ( Abs(oblu.w - iblu.w) * t.f )
ElseIf oblu.w=iblu.w
fblu.w=oblu.w
EndIf

Plot(x.w, y.w, RGB(fred.w,fgre.w,fblu.w))
EndIf
EndProcedure
Aber eigentlich könnt ich ja mal gucken, ob ich die mal optimieren kann, wäre ja bestimmt schön so... Naja, aber für so große Kreisflächen taugt das nicht. Du könntest als schnelle Variante ja mal einfach die ein Bild mit einem Kreis machen, dass transparent aufmalen, es verkleinern, nochmal auf dem gleichen Punkt transparent aufmalen... und so weiter.

Also im Prinzip so hier:
- großes Keisbild machen
- mit bestimmtem Transparentwert malen
- bild verkleinern und mit gleicher transparenz auf den bilschirm malen (zentriert)
dan eigentlich nur halt noch so oft verkleinern und malen, wie viele Übergänge du haben willst... Ist aber auch nicht grad das nonplus-Ultra. Da du ja sicher die Mathematik dahinter wissen willst, wird dir ja wohl auch egal sein, dass PB solche grauen Bitmaps durch Directx benutzen kann, um Schattierungen hervorzurufen.
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

Beitrag von unix »

Ich glaube du hasst nicht ganz verstanden

ich brauche das um den Auge also der Lichtefekt NICHT Das Auge selber!
Das habe ich schon! :allright:
mit Malen und dann Verschwimmenlassen(schärfe minimieren) habe ich es schon probiert.
Nur leider sieht das lang nicht so gut aus!
Wenn du mich verstehst.

Am Besten wäre eine Art halbtransparentes Sprite Das ich auf Das Bild lege dass es mittig wäre

Wichtig Halbtransparent NICHT Transparent da es sonst nur "Aufgelegt" aussieht!

Also am besten ein Grafikprogramm mit den man ein Solchen Effekt machen kann. Möglichchst realistisch!

Obwohl ich schon mit Halbtransparenz arbeite kann ich nicht gut genug malen! <)

Aber trotzdem Danke wenn du mich falsch verstanden haben soltest!


[EDIT]
Code fürs Verschwimmen lassen:

Code: Alles auswählen

InitSprite()
InitKeyboard()

UseJPEGImageDecoder()
UseJPEGImageEncoder()

OpenScreen(800,600,16,"")

LoadSprite(0,"E:\Bilder\Games\BlendGreen.jpg")
CopySprite(0,1)

Global Detail.b : Detail = 2
Global e.b : e = 30     ;e = Empfindlichkeit und Detail Verschwimmgröße

StartDrawing(SpriteOutput(1))
;{ Herenzontal
For y = 0 To SpriteHeight(0)
 For x = 0 To SpriteWidth(0)
  Color1 = Point(x,y)
  R1 = Red(Color1)  
  G1 = Green(Color1)
  B1 = Blue(Color1)
  Color2 = Point(x+1,y)
  R2 = Red(Color2)  
  G2 = Green(Color2)
  B2 = Blue(Color2)
  If Abs(R1-R2) > e Or Abs(G1-G2) > e Or Abs(B1-B2) > e
    For xx = Detail*-1 To Detail
     If xx <> 0 And X+xx > -1 And X+xx < SpriteWidth(1)+1
     Colorx = Point(X+xx,Y)
     Rx = Red(Colorx)
     Gx = Green(Colorx)
     Bx = Blue(Colorx)
     diR.f = R1 - Rx
     diG.f = G1 - Gx
     diB.f = B1 - Bx
     zR.f = diR / Detail
     zG.f = diG / Detail
     zB.f = diB / Detail
     i.f = xx
     eR = Rx + (zR * (Abs(i)*-1+Detail))
     eG = Gx + (zG * (Abs(i)*-1+Detail)) 
     eB = Bx + (zB * (Abs(i)*-1+Detail))
     ;Zeichnen
     FrontColor(eR, eG, eB)
     Plot(X+xx,Y)
    EndIf
   Next
  EndIf
 Next
Next
;}
;{ Vertical
For x = 0 To SpriteWidth(0) 
 For y = 0 To SpriteHeight(0)
  Color1 = Point(x,y)
  R1 = Red(Color1)  
  G1 = Green(Color1)
  B1 = Blue(Color1)
  Color2 = Point(x,y+1)
  R2 = Red(Color2)  
  G2 = Green(Color2)
  B2 = Blue(Color2)
  If Abs(R1-R2) > e Or Abs(G1-G2) > e Or Abs(B1-B2) > e
    For yy = Detail*-1 To Detail
     If yy <> 0 And Y+yy > -1 And Y+yy < SpriteHeight(1)+1
     Colorx = Point(X,Y+yy)
     Rx = Red(Colorx)
     Gx = Green(Colorx)
     Bx = Blue(Colorx)
     diR.f = R1 - Rx
     diG.f = G1 - Gx
     diB.f = B1 - Bx
     zR.f = diR / Detail
     zG.f = diG / Detail
     zB.f = diB / Detail
     i.f = yy
     eR = Rx + (zR * (Abs(i)*-1+Detail))
     eG = Gx + (zG * (Abs(i)*-1+Detail)) 
     eB = Bx + (zB * (Abs(i)*-1+Detail))
     ;Zeichnen
     FrontColor(eR, eG, eB)
     Plot(X,Y+yy)
    EndIf
   Next
  EndIf
 Next
Next
;}
StopDrawing()

Repeat

ExamineKeyboard()

ClearScreen(0,0,0)
 
 DisplaySprite(1,0,0)

FlipBuffers()

Until KeyboardPushed(#PB_Key_Escape)

SaveSprite(1, "E:\Bilder\Games\BlendGreenb.jpg", #PB_ImagePlugin_JPEG,5)


End

Wobei ihr merken wird das auch der Code noch nicht ausgereift ist
==> Horenzontal, Vertical
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
DarkDragon
Beiträge: 6291
Registriert: 29.08.2004 08:37
Computerausstattung: Hoffentlich bald keine mehr
Kontaktdaten:

Beitrag von DarkDragon »

:lol: Das nennst du Blending(Blending <> blendend)?
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

Beitrag von unix »

nein wir habens erst einmal von verschwimmen gehabt da ich aber festgestellt habe das das Scheiße aussieht wollte ich das echte "Blending"
Das ganze mit den verschwimmen war nur ein Versuch!

Deshalb frage ich euch ja nach einer Lösung für ein echtes "Blending"

Oder wie auch immer ihr so etwas bezeichnet
<== keine Ahnung von so etwas
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Nennt sich das nicht "Lenseflare"?

Ich glaub kaum, daß da viel berechnet wird, sondern ich würd das bereits als Sprite vorbereiten und dann so halbtransparent drüberkleben oder so... keine Ahnung ob das dann gut aussieht aber das wär mein erster Versuch ;)
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

Beitrag von unix »

Juhuu ZeHa hat mein Problem gut erkannt
aber ZeHa wenn man es Halbtransparent Auflegt also kurz mit dem Hintergrung verschwimmen lässt sieht das doch keine Sau.

Natürlich darf di Halbtransparenz nicht primitiv sein wie

============== Bild
==============Transparenz
============== Bild
==============Transparenz
============== Bild
==============Transparenz
.
.
.

Das würde wie Streifen aussehen sondern richtig haltransprent!
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
Benutzeravatar
ZeHa
Beiträge: 4760
Registriert: 15.09.2004 23:57
Wohnort: Friedrichshafen
Kontaktdaten:

Beitrag von ZeHa »

Es gibt 'ne Funktion namens DisplayTranslucideSprite() - die könnte Dich evtl interessieren ;) mit der kannst Du auch festlegen, inwiefern das Sprite nun durchscheinend ist oder nicht!

Schau einfach mal in der Hilfe nach, da steht, wie Du die benutzen mußt.

Viel Erfolg :mrgreen:
Benutzeravatar
unix
Beiträge: 361
Registriert: 15.02.2005 19:25
Wohnort: Zwischen Coburg und Bamberg :-)
Kontaktdaten:

Beitrag von unix »

Schon probiert aber das anzeigen ist ja nicht das Problem sonder die Form "Malen" oder am besten mit ein grafikprogramm erzeugen meine sehen hässlich aus! auch wenn sie schon perfekt halbtransparent sind (siehe mein Code <) )

das heist ich brauche die Form!
(Ring und Strahlen)

Was für ein Grafikprogramm kann so etwas?

<== hat nur Paint :oops:
Hier steht normalerweise die Putzfrau drin,
die hat aber Urlaub.
MfG : Unix
Benutzeravatar
Green Snake
Beiträge: 1394
Registriert: 22.02.2005 19:08

Beitrag von Green Snake »

@ZeHa

sorry, ist nicht ganz topic, aber....
ich hab da diverse probs mit DisplayTranslucideSprite()
das teil ist einfach sch**** langsam :?

ich kann es deswegen nicht verwänden :cry:

auch mit StartSpecialFX() wirds nicht sehr viel schneller.....wieso das? :?
3D Sprites sind ei mir dabei um längen schneller :?
-.-"
Antworten