Transparentes Rechteck

Übersicht BlitzBasic Codearchiv

Neue Antwort erstellen

Xaymar

ehemals "Cgamer"

Betreff: Transparentes Rechteck

BeitragDi, Okt 21, 2008 17:52
Antworten mit Zitat
Benutzer-Profile anzeigen
Hi,

Dieser Code ist aus langeweile entstanden. Er zeichnet ein Transparent Rechteck(alpha# = 0.0 - 1.0).
Code: [AUSKLAPPEN]
Function Rect2(X, Y, W, H, A# = .5, Sub = 0)
   R2 = ColorRed()
   G2 = ColorGreen()
   B2 = ColorBlue()
   W2 = GraphicsWidth()
   H2 = GraphicsHeight()
   
   If Sub = 0
      If R2 = 0 And G2 = 0 And B2 = 0
         Return 0
      Else
         For X5 = 0 To W-1 :    For Y5 = 0 To H-1
            RGB = ReadPixelFast(X+X5, Y+Y5)
            R1 = (RGB And $FF0000) / $10000
            G1 = (RGB And $FF00) / $100
            B1 = (RGB And $FF)
            If R2 > 0 R3 = R1 + (R2 * A#) Else R3 = R1
            If G2 > 0 G3 = G1 + (G2 * A#) Else G3 = G1
            If B2 > 0 B3 = B1 + (B2 * A#) Else B3 = B1
            If R3 > 255 R3 = 255
            If G3 > 255 G3 = 255
            If B3 > 255 B3 = 255
            RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3
            If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0
               WritePixelFast X+X5, Y+Y5, RGB
            EndIf
         Next : Next
      EndIf
   Else
      For X5 = 0 To W-1 :    For Y5 = 0 To H-1
         RGB = ReadPixelFast(X+X5, Y+Y5)
         R1 = (RGB And $FF0000) / $10000
         G1 = (RGB And $FF00) / $100
         B1 = (RGB And $FF)
         R3 = R1 - (R2 * A#)
         G3 = G1 - (G2 * A#)
         B3 = B1 - (B2 * A#)
         If R3 < 0 R3 = 0
         If G3 < 0 G3 = 0
         If B3 < 0 B3 = 0
         RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3
         If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0
            WritePixelFast X+X5, Y+Y5, RGB
         EndIf
      Next : Next
   EndIf
End Function


Beschreibung:
X, Y - Wer weiß das nicht?
W, H - Width, Height
A# - Alpha#
Sub - Color1 - (Color2 * A#) falls auf 1 gesetzt sonst Color1 + (Color2 * A#) (Berechnung)

Beispielcode:
Code: [AUSKLAPPEN]
Function Rect2(X, Y, W, H, A# = .5, Sub = 0)
   R2 = ColorRed()
   G2 = ColorGreen()
   B2 = ColorBlue()
   W2 = GraphicsWidth()
   H2 = GraphicsHeight()
   
   If Sub = 0
      If R2 = 0 And G2 = 0 And B2 = 0
         Return 0
      Else
         For X5 = 0 To W-1 :    For Y5 = 0 To H-1
            RGB = ReadPixelFast(X+X5, Y+Y5)
            R1 = (RGB And $FF0000) / $10000
            G1 = (RGB And $FF00) / $100
            B1 = (RGB And $FF)
            If R2 > 0 R3 = R1 + (R2 * A#) Else R3 = R1
            If G2 > 0 G3 = G1 + (G2 * A#) Else G3 = G1
            If B2 > 0 B3 = B1 + (B2 * A#) Else B3 = B1
            If R3 > 255 R3 = 255
            If G3 > 255 G3 = 255
            If B3 > 255 B3 = 255
            RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3
            If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0
               WritePixelFast X+X5, Y+Y5, RGB
            EndIf
         Next : Next
      EndIf
   Else
      For X5 = 0 To W-1 :    For Y5 = 0 To H-1
         RGB = ReadPixelFast(X+X5, Y+Y5)
         R1 = (RGB And $FF0000) / $10000
         G1 = (RGB And $FF00) / $100
         B1 = (RGB And $FF)
         R3 = R1 - (R2 * A#)
         G3 = G1 - (G2 * A#)
         B3 = B1 - (B2 * A#)
         If R3 < 0 R3 = 0
         If G3 < 0 G3 = 0
         If B3 < 0 B3 = 0
         RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3
         If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0
            WritePixelFast X+X5, Y+Y5, RGB
         EndIf
      Next : Next
   EndIf
End Function

Graphics 800, 600, 16, 2
SeedRnd MilliSecs()
SetBuffer BackBuffer()

Color 255, 0, 0
ClsColor Rand(255), Rand(255), Rand(255)

While Not KeyHit(1)
   Cls
   Text 0, 100, "Drawing Alphad Rect: " + taken + "MS"
   
   msec = MilliSecs()
   LockBuffer BackBuffer()
   Color A, 0, 0
   Rect2(MouseX()-50, MouseY()-50, 100, 100, .25, T)
   Rect2(MouseX()-48, MouseY()-48, 96, 75, .25, T)
   Rect2(MouseX()-46, MouseY()-46, 92, 50, .25, T)
   Rect2(MouseX()-44, MouseY()-44, 88, 25, .25, T)
   UnlockBuffer BackBuffer()
   taken= MilliSecs() - msec
   
   If MouseHit(1) T = 1-T
   a = (A + 1) Mod 256
   Flip
Wend


Läuft bei mir mit ca 40ms(ohne Debugger)

Ich weiß, sowas gabs schon.

Mfg
Warbseite
 

da_poller

BeitragDi, Okt 21, 2008 18:36
Antworten mit Zitat
Benutzer-Profile anzeigen
40ms ist verdammt lange...

da ist die draw3D von hectic wohl besser aber die idee ansich nicht schlecht..

Xaymar

ehemals "Cgamer"

BeitragDi, Okt 21, 2008 18:49
Antworten mit Zitat
Benutzer-Profile anzeigen
würde ich eine dll daraus machen würde es mit 0-3ms laufen. Aber ich kann kein c++. bzw ich hab kein programm dafür. außerdem ist meins fully 2D
Warbseite
 

Phlox

BeitragDi, Okt 21, 2008 19:48
Antworten mit Zitat
Benutzer-Profile anzeigen
...und stürzt ab, wenn man an den oberen Bildschirmrand kommt. Genau.

Xaymar

ehemals "Cgamer"

BeitragDi, Okt 21, 2008 20:57
Antworten mit Zitat
Benutzer-Profile anzeigen
mmh, sicher?
bei mir nämlich nicht
Und hier nochmal als linie:
Code: [AUSKLAPPEN]
Function Line2(X, Y, X2, Y2, A# = .5, Sub = 0)
   R2 = ColorRed()
   G2 = ColorGreen()
   B2 = ColorBlue()
   W2 = GraphicsWidth()
   H2 = GraphicsHeight()
   X3 = X2 - X
   Y3 = Y2 - Y
   If X3 > 0 XA = 1
   If X3 < 0 XA = -1
   If Y3 > 0 YA = 1
   If Y3 < 0 YA = -1
   
   If Sub = 0
      If R2 = 0 And G2 = 0 And B2 = 0
         Return 0
      Else
         If Abs(Y3) < Abs(X3)
            AddY = -Abs(X3)
            Delta = 2 * Abs(Y3)
            CouY = 2 * AddY
            While X+X5 <> X2
               X5 = X5 + XA
               AddY = AddY + Delta
               If AddY > 0 Y5 = Y5 + YA : AddY = AddY + CouY
               RGB = ReadPixelFast(X+X5, Y+Y5)
               R1 = (RGB And $FF0000) / $10000
               G1 = (RGB And $FF00) / $100
               B1 = (RGB And $FF)
               If R2 > 0 R3 = R1 + (R2 * A#) Else R3 = R1
               If G2 > 0 G3 = G1 + (G2 * A#) Else G3 = G1
               If B2 > 0 B3 = B1 + (B2 * A#) Else B3 = B1
               If R3 > 255 R3 = 255
               If G3 > 255 G3 = 255
               If B3 > 255 B3 = 255
               RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3
               If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0
                  WritePixelFast X+X5, Y+Y5, RGB
               EndIf
            Wend
         Else
            AddX = -Abs(Y3)
            Delta = 2 * Abs(X3)
            CouX = 2 * AddX
            While Y+Y5 <> Y2
               Y5 = Y5 + YA
               AddX = AddX + Delta
               If AddX > 0 X5 = X5 + XA : AddX = AddX + CouX
               RGB = ReadPixelFast(X+X5, Y+Y5)
               R1 = (RGB And $FF0000) / $10000
               G1 = (RGB And $FF00) / $100
               B1 = (RGB And $FF)
               If R2 > 0 R3 = R1 + (R2 * A#) Else R3 = R1
               If G2 > 0 G3 = G1 + (G2 * A#) Else G3 = G1
               If B2 > 0 B3 = B1 + (B2 * A#) Else B3 = B1
               If R3 > 255 R3 = 255
               If G3 > 255 G3 = 255
               If B3 > 255 B3 = 255
               RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3
               If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0
                  WritePixelFast X+X5, Y+Y5, RGB
               EndIf
            Wend
         EndIf
      EndIf
   Else
      If Abs(Y3) < Abs(X3)
         AddY = -Abs(X3)
         Delta = 2 * Abs(Y3)
         CouY = 2 * AddY
         While X+X5 <> X2
            X5 = X5 + XA
            AddY = AddY + Delta
            If AddY > 0 Y5 = Y5 + YA : AddY = AddY + CouY
            RGB = ReadPixelFast(X+X5, Y+Y5)
            R1 = (RGB And $FF0000) / $10000
            G1 = (RGB And $FF00) / $100
            B1 = (RGB And $FF)
            R3 = R1 - (R2 * A#)
            G3 = G1 - (G2 * A#)
            B3 = B1 - (B2 * A#)
            If R3 < 0 R3 = 0
            If G3 < 0 G3 = 0
            If B3 < 0 B3 = 0
            RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3
            If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0
               WritePixelFast X+X5, Y+Y5, RGB
            EndIf
         Wend
      Else
         AddX = -Abs(Y3)
         Delta = 2 * Abs(X3)
         CouX = 2 * AddX
         While Y+Y5 <> Y2
            Y5 = Y5 + YA
            AddX = AddX + Delta
            If AddX > 0 X5 = X5 + XA : AddX = AddX + CouX
            RGB = ReadPixelFast(X+X5, Y+Y5)
            R1 = (RGB And $FF0000) / $10000
            G1 = (RGB And $FF00) / $100
            B1 = (RGB And $FF)
            R3 = R1 - (R2 * A#)
            G3 = G1 - (G2 * A#)
            B3 = B1 - (B2 * A#)
            If R3 < 0 R3 = 0
            If G3 < 0 G3 = 0
            If B3 < 0 B3 = 0
            RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3
            If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0
               WritePixelFast X+X5, Y+Y5, RGB
            EndIf
         Wend
      EndIf
   EndIf
End Function


Code: [AUSKLAPPEN]
Function Line2(X, Y, X2, Y2, A# = .5, Sub = 0)
   R2 = ColorRed()
   G2 = ColorGreen()
   B2 = ColorBlue()
   W2 = GraphicsWidth()
   H2 = GraphicsHeight()
   X3 = X2 - X
   Y3 = Y2 - Y
   If X3 > 0 XA = 1
   If X3 < 0 XA = -1
   If Y3 > 0 YA = 1
   If Y3 < 0 YA = -1
   
   If Sub = 0
      If R2 = 0 And G2 = 0 And B2 = 0
         Return 0
      Else
         If Abs(Y3) < Abs(X3)
            AddY = -Abs(X3)
            Delta = 2 * Abs(Y3)
            CouY = 2 * AddY
            While X+X5 <> X2
               X5 = X5 + XA
               AddY = AddY + Delta
               If AddY > 0 Y5 = Y5 + YA : AddY = AddY + CouY
               RGB = ReadPixelFast(X+X5, Y+Y5)
               R1 = (RGB And $FF0000) / $10000
               G1 = (RGB And $FF00) / $100
               B1 = (RGB And $FF)
               If R2 > 0 R3 = R1 + (R2 * A#) Else R3 = R1
               If G2 > 0 G3 = G1 + (G2 * A#) Else G3 = G1
               If B2 > 0 B3 = B1 + (B2 * A#) Else B3 = B1
               If R3 > 255 R3 = 255
               If G3 > 255 G3 = 255
               If B3 > 255 B3 = 255
               RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3
               If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0
                  WritePixelFast X+X5, Y+Y5, RGB
               EndIf
            Wend
         Else
            AddX = -Abs(Y3)
            Delta = 2 * Abs(X3)
            CouX = 2 * AddX
            While Y+Y5 <> Y2
               Y5 = Y5 + YA
               AddX = AddX + Delta
               If AddX > 0 X5 = X5 + XA : AddX = AddX + CouX
               RGB = ReadPixelFast(X+X5, Y+Y5)
               R1 = (RGB And $FF0000) / $10000
               G1 = (RGB And $FF00) / $100
               B1 = (RGB And $FF)
               If R2 > 0 R3 = R1 + (R2 * A#) Else R3 = R1
               If G2 > 0 G3 = G1 + (G2 * A#) Else G3 = G1
               If B2 > 0 B3 = B1 + (B2 * A#) Else B3 = B1
               If R3 > 255 R3 = 255
               If G3 > 255 G3 = 255
               If B3 > 255 B3 = 255
               RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3
               If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0
                  WritePixelFast X+X5, Y+Y5, RGB
               EndIf
            Wend
         EndIf
      EndIf
   Else
      If Abs(Y3) < Abs(X3)
         AddY = -Abs(X3)
         Delta = 2 * Abs(Y3)
         CouY = 2 * AddY
         While X+X5 <> X2
            X5 = X5 + XA
            AddY = AddY + Delta
            If AddY > 0 Y5 = Y5 + YA : AddY = AddY + CouY
            RGB = ReadPixelFast(X+X5, Y+Y5)
            R1 = (RGB And $FF0000) / $10000
            G1 = (RGB And $FF00) / $100
            B1 = (RGB And $FF)
            R3 = R1 - (R2 * A#)
            G3 = G1 - (G2 * A#)
            B3 = B1 - (B2 * A#)
            If R3 < 0 R3 = 0
            If G3 < 0 G3 = 0
            If B3 < 0 B3 = 0
            RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3
            If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0
               WritePixelFast X+X5, Y+Y5, RGB
            EndIf
         Wend
      Else
         AddX = -Abs(Y3)
         Delta = 2 * Abs(X3)
         CouX = 2 * AddX
         While Y+Y5 <> Y2
            Y5 = Y5 + YA
            AddX = AddX + Delta
            If AddX > 0 X5 = X5 + XA : AddX = AddX + CouX
            RGB = ReadPixelFast(X+X5, Y+Y5)
            R1 = (RGB And $FF0000) / $10000
            G1 = (RGB And $FF00) / $100
            B1 = (RGB And $FF)
            R3 = R1 - (R2 * A#)
            G3 = G1 - (G2 * A#)
            B3 = B1 - (B2 * A#)
            If R3 < 0 R3 = 0
            If G3 < 0 G3 = 0
            If B3 < 0 B3 = 0
            RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3
            If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0
               WritePixelFast X+X5, Y+Y5, RGB
            EndIf
         Wend
      EndIf
   EndIf
End Function

Function Rect2(X, Y, W, H, A# = .5, Sub = 0)
   R2 = ColorRed()
   G2 = ColorGreen()
   B2 = ColorBlue()
   W2 = GraphicsWidth()
   H2 = GraphicsHeight()
   
   If Sub = 0
      If R2 = 0 And G2 = 0 And B2 = 0
         Return 0
      Else
         For X5 = 0 To W-1 :    For Y5 = 0 To H-1
            RGB = ReadPixelFast(X+X5, Y+Y5)
            R1 = (RGB And $FF0000) / $10000
            G1 = (RGB And $FF00) / $100
            B1 = (RGB And $FF)
            If R2 > 0 R3 = R1 + (R2 * A#) Else R3 = R1
            If G2 > 0 G3 = G1 + (G2 * A#) Else G3 = G1
            If B2 > 0 B3 = B1 + (B2 * A#) Else B3 = B1
            If R3 > 255 R3 = 255
            If G3 > 255 G3 = 255
            If B3 > 255 B3 = 255
            RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3
            If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0
               WritePixelFast X+X5, Y+Y5, RGB
            EndIf
         Next : Next
      EndIf
   Else
      For X5 = 0 To W-1 :    For Y5 = 0 To H-1
         RGB = ReadPixelFast(X+X5, Y+Y5)
         R1 = (RGB And $FF0000) / $10000
         G1 = (RGB And $FF00) / $100
         B1 = (RGB And $FF)
         R3 = R1 - (R2 * A#)
         G3 = G1 - (G2 * A#)
         B3 = B1 - (B2 * A#)
         If R3 < 0 R3 = 0
         If G3 < 0 G3 = 0
         If B3 < 0 B3 = 0
         RGB = 255 * $1000000 + R3 * $10000 + G3 * $100 + B3
         If X+X5 < W2 And X+X5 >= 0 And Y+Y5 < H2 And Y+Y5 >= 0
            WritePixelFast X+X5, Y+Y5, RGB
         EndIf
      Next : Next
   EndIf
End Function

Graphics 800, 600, 16, 2
SetBuffer BackBuffer()
Color 128, 128, 128
While Not KeyHit(1)
   LockBuffer BackBuffer()
   Rect2(350, 250, 100, 100, .01)
   Line2(400, 300, 400+Cos(A)*100, 300+Sin(A)*100, .5, 1)
   Line2(600, 300, 600+Cos(A)*100, 300+Sin(A)*100, .01)
   A = (A + 1) Mod 360
   Line2(400, 300, 400+Cos(A)*100, 300+Sin(A)*100, .5, 1)
   Line2(600, 300, 600+Cos(A)*100, 300+Sin(A)*100, .01)
   A = (A + 1) Mod 360
   Line2(400, 300, 400+Cos(A)*100, 300+Sin(A)*100, .5, 1)
   Line2(600, 300, 600+Cos(A)*100, 300+Sin(A)*100, .01)
   A = (A + 1) Mod 360
   UnlockBuffer BackBuffer()
   Flip
Wend
Warbseite

Neue Antwort erstellen


Übersicht BlitzBasic Codearchiv

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group