Transparenz von Bildern

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

Mooch

Betreff: Transparenz von Bildern

BeitragMi, Sep 29, 2004 19:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Hallo,
ich möchte gerne ein Bild so auf
dem Bildschirm ausgeben, dass
durscheinend ist.
Geht dass mit Blitz3D?
Wenn ja, wie?
Pentium IV 3.0Ghz; nVidia Geforce 6800;
Microsoft Windows XP Home SP2; BlitzBasic 3D

.:: Sites ::.
.:: http://www.fl4sh-clan.de/ ::.


BladeRunner

Moderator

BeitragMi, Sep 29, 2004 19:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Schau mal mit der Suche nach. das Thema wurde schon häufiger behandelt. (Gleich vorneweg: es gibt keine für große Graphiken in Echtzeit geeignete Methode).
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
 

Kekskiller

BeitragMi, Sep 29, 2004 21:19
Antworten mit Zitat
Benutzer-Profile anzeigen
Also wie schon Bladerunner sagte, gibt es keine wirklich schnelle
Methode, Bilder transparent anzuzeigen. Mit Blitz3D könnte man das
aber hinbekommen, nur kenne ich mich in 3D nicht so sehr gut aus Confused .
Aber falls du eine recht akzeptable Pur-Quelltext-variante haben
möchtest, sie m Code-Archiv nach (*g*) . *werbung* habe da mal was
gebaut Laughing . Sogar mit Durchscheinungsangabe, aber wie immer -> zu lahm.
Aber der "ich-bin-der-größte-Schatten" hat eine überflüssige Dll gebaut,
mit der man ein wenig Halbtransparenz machen kann. Aber angesicht
eine Dll ist das ganze doch besser zu umgehen und ganz wegzulassen.
 

Timo

BeitragMi, Sep 29, 2004 21:23
Antworten mit Zitat
Benutzer-Profile anzeigen
Mir ist da mal ne Idee gekommen... auch wenn es die bestimmt schon gibt. Aber ich find sie gut: Wir gehen davon aus, wir wollen jedes Bild zu 50% anzeigen. Wie wärs, wenn man jetzt in jedem zweiten Pixel nur das erste Bild anzeigt und in den entstandenen Lücken das zweite Bild? das müsste doch um ein vielfaches schneller gehen...
 

getlose

BeitragMi, Sep 29, 2004 21:26
Antworten mit Zitat
Benutzer-Profile anzeigen
das wäre keine Transparenz und würde komisch aussehen :)
außerdem musst du weiterhin jeden Pixel selber setzen,
was viel Zeit kostet.
 

Kekskiller

BeitragMi, Sep 29, 2004 21:34
Antworten mit Zitat
Benutzer-Profile anzeigen
Ja, das zeitraubende ist das Pixel-Setzen, der Rest ist Pipifax.
Man bräuchte sowieso eine seeeeehr hohe Auflösung, um den
Unterschied nichtzu bemerken 8) ...

Travis

BeitragMi, Sep 29, 2004 21:37
Antworten mit Zitat
Benutzer-Profile anzeigen
Man kann doch einfach ein Sprite nehmen. Das sollte doch relativ schnell gehen oder? Wink
www.funforge.org

Ich hasse WASD-Steuerung.

Man kann alles sagen, man muss es nur vernünftig begründen können.
 

BIG BUG

BeitragMi, Sep 29, 2004 22:12
Antworten mit Zitat
Benutzer-Profile anzeigen
@Mooch: nutze 3D-Sprites(wie Travis schon sagte)

@HalbHalb-Transparenz mit BB2D

Hier mal ein paar verschiedene Methoden im Vergleich
(mit Methode 4 bekommt man schon halbwegs ansehliche Fake-Halbtransparenz hin):

Code: [AUSKLAPPEN]

;by Robert Hierl(BIG BUG) 25.06.2003

;Images halbtransparent zeichnen mit Blitz2D
;1. Read-/Writepixelmethode
;   Pixel werden einzeln eingelesen und der Durchschnitt berechnet
;   -gute Bildqualitaet
;   -langsam
;   -kein Clipping
;2. Rastermethode
;   Es wird nur jedes 2. Pixel eingezeichnet
;   -schlechte Bildqualitaet
;   -schnell
;   -relativ hohe Aufloesung benoetigt
;3. An-/Ausmethode
;   Das gesamte Bild wird nur jede 2. Frame eingezeichnet
;   -mittlere Bildqualitaet, aber nur bei exakter Synchronisation mit Monitor(V-Sync)
;    Hier besser "VWait" mit "Flip 0" verwenden um V-Sync zu erzwingen
;   -schnell
;   -relativ hohe Framerate benoetigt
;   -kein Waittimer moeglich
;4. Kombimethode
;   Raster- mit An-/Ausmethode kombiniert
;   -mittlere Bildqualitaet, V-Sync zwar empfehlenswert, aber nicht so anfaellig gegen
;    ungenaue Synchronisation wie An-/Ausmethode, so dass auch Waittimer moeglich ist
;   -schnell
;   -relativ hohe Framerate benoetigt

Graphics 800, 600, 16, 1
SetBuffer BackBuffer()

img_bg = LoadImage("Back.jpg")
img_sp = LoadImage("Image1.bmp")

bk_sprite = CreateImageBank(img_sp)
 
img_grid1 = CreateGridImage(img_sp,0,$000000)
img_grid2 = CreateGridImage(img_sp,1,$000000)

timer = CreateTimer(60)

Repeat

   If h_switch Then
      h_switch = 0
   Else
      h_switch = 1
   EndIf

   TileBlock img_bg


;  1.Echte Halbtransparenz(evtl. Auskommentieren wenn zu langsam)     
;     DrawTranspImage(bk_sprite, 130, 60)

;  2.Fake mit Rastermethode
;     DrawImage(img_grid1, 210, 60)

;  3.Fake durch Zeichnen nur bei jeder 2. Frame
;     If h_switch Then DrawImage(img_sp,    130, 130)

;  4.Beide Fake-Methoden gemischt
     If h_switch Then
        DrawImage(img_grid1, 210, 130)
     Else
        DrawImage(img_grid2, 210, 130)
     EndIf


;  FPS ermitteln
   fps_fpscnt% = fps_fpscnt% + 1     
   fps_new_sec% = MilliSecs()
   If (fps_new_sec% => fps_old_sec% + 1000)
      fps_fps% = fps_fpscnt%
      fps_fpscnt% = 0
      fps_old_sec% = fps_new_sec%
   EndIf
   Text 0,0, fps_fps%

   Text 120, 60,  "1."
   Text 200, 60,  "2."
   Text 120, 130, "3."
   Text 200, 130, "4."

;   WaitTimer timer

   VWait()
   Flip 0

Until KeyHit(1)

;-----Ende Hauptprogramm


;Erstellt ein neues Rasterbild aus bestehendem Image
Function CreateGridImage(image, start=0, maskcolor=$000000)
 
   Local grid
   Local hx
   Local hy

   grid = CopyImage(image)
   For hy = 0 To ImageHeight(grid) - 1
       For hx = 0 To ImageWidth(grid) - 1
           If (start + hx + hy) Mod 2 Then WritePixel hx, hy, maskcolor, ImageBuffer(grid)
       Next
   Next
   Return grid

End Function



;Speichert ein Bild in einer Bank
Function CreateImageBank(image)

  Local bank
  Local offset
  Local hx
  Local hy

  bank = CreateBank(ImageWidth(image) * ImageHeight(image) * 4 + 4)

; Bildinformationen
  PokeShort bank, 0, ImageWidth(image)
  PokeShort bank, 2, ImageHeight(image)

; Bilddaten
  offset = 4
  For hy = 0 To ImageHeight(image) - 1
      For hx = 0 To ImageWidth(image) - 1
          PokeInt bank, offset, ReadPixel(hx, hy, ImageBuffer(image)) And $FFFFFF
          offset = offset + 4
      Next
  Next
  Return bank

End Function


;Zeichnet eine Imagebank halbtransparent(ohne Clipping)
Function DrawTranspBlock(imagebank, x, y)

   Local hx
   Local hy
   Local bx
   Local by
   Local offset


   LockBuffer

   by = y   
   offset = 4
   For hy = 0 To PeekShort(imagebank, 2) - 1
       bx = x
       For hx = 0 To PeekShort(imagebank, 0) - 1
           pixel = PeekInt(imagebank, offset)
           pixel = (pixel And $FEFEFE) Shr 1 + (ReadPixelFast(bx, by) And $FEFEFE) Shr 1
           WritePixelFast bx, by, pixel
           bx = bx + 1
           offset = offset + 4           
       Next
       by = by + 1
   Next

   UnlockBuffer

End Function


;Zeichnet eine Imagebank halbtransparent(ohne Clipping mit Maskcolor)
Function DrawTranspImage(imagebank, x, y, maskcolor=$000000)

   Local hx
   Local hy
   Local bx
   Local by
   Local offset
   Local my
   Local mx
   my = PeekShort(imagebank, 2) - 1
   mx = PeekShort(imagebank, 0) - 1

   LockBuffer

   by = y   
   offset = 4
   For hy = 0 To my
       bx = x
       For hx = 0 To mx
           pixel = PeekInt(imagebank, offset) 
           If pixel <> maskcolor Then
              pixel = (pixel And $FEFEFE) Shr 1 + (ReadPixelFast(bx, by) And $FEFEFE) Shr 1
              WritePixelFast bx, by, pixel
           EndIf
           bx = bx + 1
           offset = offset + 4           
       Next
       by = by + 1
   Next

   UnlockBuffer

End Function
B3D-Exporter für Cinema4D!(V1.4)
MD2-Exporter für Cinema4D!(final)

Mooch

Betreff: Danke!

BeitragDo, Sep 30, 2004 14:26
Antworten mit Zitat
Benutzer-Profile anzeigen
@Kekskiller und @Big Bug:
Vielen Dank! Ich probiers mal aus!
Pentium IV 3.0Ghz; nVidia Geforce 6800;
Microsoft Windows XP Home SP2; BlitzBasic 3D

.:: Sites ::.
.:: http://www.fl4sh-clan.de/ ::.


Mooch

Betreff: Juhu!

BeitragMo, Okt 18, 2004 12:42
Antworten mit Zitat
Benutzer-Profile anzeigen
Funktioniert super!
Vielen Dank an alle!
Pentium IV 3.0Ghz; nVidia Geforce 6800;
Microsoft Windows XP Home SP2; BlitzBasic 3D

.:: Sites ::.
.:: http://www.fl4sh-clan.de/ ::.


Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group