Fragen zum AlphaBlending

Fragen zu Grafik- & Soundproblemen und zur Spieleprogrammierung haben hier ihren Platz.
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Fragen zum AlphaBlending

Beitrag von Mijikai »

Ich benutze momentan das unten stehende Makro fürs AlphaBlending.

Wie könnte ich noch einen zusätzlichen Alphawert integrieren um die gesamte Tranzparents zu beeinflussen?

Auch noch nicht ganz klar ist mir -> was ich mit dem Alpha Kanal der ersten Farbe? :freak:
Einfach so lassen ? (Will später evtl. mehrfach Pixel kopieren - also auch c1 als Quelle verwenden.)

Code:

Code: Alles auswählen

EnableExplicit

Structure COLOR
  StructureUnion
    rgba.a[4]
    code.l
  EndStructureUnion
EndStructure

Macro mBlendAlpha(_c1_,_c2_)
  _c1_\rgba[0] = ((_c2_\rgba[0] * _c2_\rgba[3]) + (_c1_\rgba[0] * (256 - _c2_\rgba[3]))) >> 8
  _c1_\rgba[1] = ((_c2_\rgba[1] * _c2_\rgba[3]) + (_c1_\rgba[1] * (256 - _c2_\rgba[3]))) >> 8
  _c1_\rgba[2] = ((_c2_\rgba[2] * _c2_\rgba[3]) + (_c1_\rgba[2] * (256 - _c2_\rgba[3]))) >> 8
EndMacro

Procedure.i Main()
  Protected c1.COLOR;ziel
  Protected c2.COLOR;quelle
  
  c1\code = $FFFFFFFF
  c2\code = $22222222
  
  mBlendAlpha(c1,c2);mit alpha von c2 -> c2\rgb[3]
  
  Debug "0x" + Hex(c1\code,#PB_Long)
  
  ProcedureReturn #Null
EndProcedure

Main()

End
Benutzeravatar
Mijikai
Beiträge: 754
Registriert: 25.09.2016 01:42

Re: Fragen zum AlphaBlending

Beitrag von Mijikai »

Hab das Problem gelöst :oops:

Code: Alles auswählen


EnableExplicit

Macro mAlphaAdd(_a1_,_a2_);visuell "addiert" es wird tranzparenter -> (Quell Alpha - Zusatz Alpha) 
  If (_a1_ - _a2_) < 0
    _a1_ = 0
  Else
    _a1_ - _a2_
  EndIf
EndMacro

Macro mAlphaSubtract(_a1_,_a2_);visuell "subtrahiert" -> Ziel Alpha + (Quell Alpha - Zuatz Alpha)
  If (_a1_ + _a2_) > 255
    _a1_ = 255
  Else
    _a1_ + _a2_
  EndIf
EndMacro

Procedure.i Main()
  Protected a1.a
  Protected a2.a
  
  a1 = 100
  a2 = 20
  
  mAddAlpha(a1,a2)
  Debug a1
  
  ProcedureReturn #Null
EndProcedure

Main()

End

Fragt sich nur ob die Makros noch effizienter geschrieben werden können ?
Antworten