Teiltransparenz im 2D-Modus mit B3D

Übersicht BlitzBasic Beginners-Corner

Neue Antwort erstellen

 

GermannX

Betreff: Teiltransparenz im 2D-Modus mit B3D

BeitragMi, Apr 16, 2008 23:05
Antworten mit Zitat
Benutzer-Profile anzeigen
Nun habe ich Google und die Forensuche bemüht, aber ich scheine einfach zu doof zu sein Very Happy
Zumindest finde ich einfach keine anständige Erklärung, die auf meinen Fall passt und die ich verstehe in der gesagt wird, ob und wie man im 2D-Modus von B3D (also "Graphics" Statt "Graphics3D") z.B. eine .tga-Bilddatei (oder auch ein anderes Format das Transparenz und Teiltransparenz unterstützt) verwendet und zwar so, dass die Teiltransparenz (also "Halbdurchsichtigkeit") auch im Spiel zur Geltung kommt.
Es ist nicht dringlich, aber es wäre für mein derzeitiges Projekt eine ordentliche Bereicherung, wenn jemand so freundlich wäre, mir zu helfen Smile
Danke im Voraus!

MfG
GermannX
...und der Tod warf seine Sense weg und stieg auf den Mähdrescher, denn es war Krieg!

peacemaker

BeitragDo, Apr 17, 2008 10:49
Antworten mit Zitat
Benutzer-Profile anzeigen
Das geht leider nicht so einfach du könntest aber mit den Befehlen
ReadPixel und WritePixel sowas manuell machen. Trotz allem ist das etwas langsam. Am besten wäre es natürlich, sowas 3D-Beschleunigt zu machen. Aber da du komplett in 2D arbeiteste wäre es arg komplex nur für einen kleinen Effekt alles umzuschreiben / umzustrukturieren.

mfG
~Tehadon~
www.tehadon.de
http://www.blitzforum.de/worklogs/14/

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Apr 17, 2008 11:26
Antworten mit Zitat
Benutzer-Profile anzeigen
Am besten ist es, wenn die Transparenz bereits im Bild abgelegt ist. Das wär dann somit der Alphachannel. Um diese auch anzeigen zu lassen, kannst du z.B. die ein Quad erstellen. Das würde dann mit CreateMesh, CreateSurface, AddVertex und AddTriangle geschehen. Wichtig ist nur, dass die Textur mit dem Mode 2 geladen wird. Du kannst dir aber auch einfach meine Draw3D (siehe Signatur) dazu ansehen, nutzen oder abschauen. Wie du willst.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

peacemaker

BeitragDo, Apr 17, 2008 13:11
Antworten mit Zitat
Benutzer-Profile anzeigen
Aber eben das wäre dann 3D. Dann würd ich dir gleich zu einer Lib wie z.B. Draw3D oder Sprite-Candy raten.

mfG
~Tehadon~
www.tehadon.de
http://www.blitzforum.de/worklogs/14/

hectic

Sieger des IS Talentwettbewerb 2006

BeitragDo, Apr 17, 2008 14:04
Antworten mit Zitat
Benutzer-Profile anzeigen
Achja, stimmt. Hatte den ersten Beitrag irgendwie falsch verstanden.

Unter reinem 2D-Modus gibt es keine Teiltransparenz bei Blitz3D. Zumindest keine, die echtzeittauglich ist. Das wäre dann die von Peacemaker1 genannte Methoe über ReadPixel die beiden Pixelwerte (transparentes Bild auf Untergrund) vergleichen und dann berechnet mit WritePixel wieder setzen.

Man kann aber auch mit einem ''dithering'' artigem Muster eine Teilstreuung machen. Dann also mit MaskImage arbeiten. Das ist dann auch echtzeittauglich. Sieht nur nicht besonders schön aus, und für Flachbildschirmnutzer müßen alle Bewegungen in zweierschritten als Minimum haben. Sonst flackert es bei dennen sehr stark. Auch tun sind besonders alte Flachbildschirme mit so einem Muster recht schwer, da bei denen zum Teil eine komprimierte Datenleitung zusteht (oder so ähnlich). So ein Muster aber viel kompression einbüsst und der Bildschirm dann eine Aktualisierungsrate von 10 FPS hat. Kommt aber echt nur bei billigen und alten Flachbildschirmen vor.
Download der Draw3D2 V.1.1 für schnelle Echtzeiteffekte über Blitz3D

Tankbuster

BeitragDo, Apr 17, 2008 14:08
Antworten mit Zitat
Benutzer-Profile anzeigen
Es würde vielleicht auch mit der altbewehrten Methode gehen, jeden 2ten Pixel Schwarz und damit durchsichtig zu machen.
Das wäre dann 50% Transparenz >,<

Ich weiß nicht, ob das das selbe ist, wie hectic mit "dithering" gemeint hat, aber wollte mal helfen ^.^
Twitter
Download Jewel Snake!
Windows|Android
 

GermannX

BeitragDo, Apr 17, 2008 22:46
Antworten mit Zitat
Benutzer-Profile anzeigen
Vielen Dank für die guten Antworten!
Nunja, wenn das so kompliziert ist (bzw. im 2D-Modus nicht echtzeittauglich verwendet werden kann), lasse ich das mal (vielleicht werde ich das bei einem späteren Projekt noch brauchen, dass ich dann gleich 3D machen werde). Danke auch dir hectic für dein freundliches Angebot, ich werde wohl zu gegebener zeit darauf zurückkommen.

MfG
GermannX
...und der Tod warf seine Sense weg und stieg auf den Mähdrescher, denn es war Krieg!
 

phil217

BeitragDo, Apr 17, 2008 22:57
Antworten mit Zitat
Benutzer-Profile anzeigen
hi
zufällig hab ich kürzlich eine Alpha Funktion für bb2d gesucht und eine aus dem englischen Forum meinen Bedürfnissen angepasst. (mit den bereits erwähnten Befehlen readpixel und writepixel)
ich poste sie einfach mal, bei Bedarf erklär ich auch wie sie funktioniert
Code: [AUSKLAPPEN]

Function transparency(foreground,background,x_pos,y_pos,alpha#)
   image = CopyImage(foreground)
   w = ImageWidth(foreground)
   h = ImageHeight(foreground)
   
   LockBuffer ImageBuffer(foreground)
   LockBuffer ImageBuffer(background)
   LockBuffer ImageBuffer(image)

   For X = 0 To w - 1
      For Y = 0 To h - 1
         CI = ReadPixelFast(X,Y,ImageBuffer(foreground))
         red_I = (CI And $FF0000)/$10000
         green_I = (CI And $FF00)/$100
         blue_I = CI And $FF
         CB = ReadPixelFast(x + x_pos,y + y_pos,ImageBuffer(background))
         red_B = (CB And $FF0000)/$10000
         green_B = (CB And $FF00)/$100
         blue_B = CB And $FF
         red = (alpha * red_I + (1 - alpha) * red_b)
         green = (alpha * green_I + (1 - alpha) * green_b)
         blue = (alpha * blue_I + (1 - alpha) * blue_b)
         rgb = 255 * $1000000 + red * $10000 + green * $100 + blue
         WritePixelFast X,Y,rgb,ImageBuffer(image)
      Next
   Next
   
   UnlockBuffer ImageBuffer(foreground)
   UnlockBuffer ImageBuffer(background)
   UnlockBuffer ImageBuffer(image)
   
   Return image
End Function


aufpassen muss man nur wegen der standardmäßigen Maskierung der Bilder, das zurückgelieferte Bild muss man neu maskieren
außerdem muss man nach jedem benutzen ein freeimage benutzen da die Funktion ein neues Bild erstellt
mfg
phil

Triton

Betreff: Re: Teiltransparenz im 2D-Modus mit B3D

BeitragFr, Apr 18, 2008 16:12
Antworten mit Zitat
Benutzer-Profile anzeigen
GermannX hat Folgendes geschrieben:
Nun habe ich Google und die Forensuche bemüht, aber ich scheine einfach zu doof zu sein Very Happy


Hm. Also ich finde ganz einfach mit "transparenz" als Suchbegriff im Codearchiv einige brauchbare Sachen:
https://www.blitzforum.de/foru...php?t=6026
https://www.blitzforum.de/foru...hp?t=14366
https://www.blitzforum.de/foru...hp?t=23720
https://www.blitzforum.de/foru...hp?t=24323
Coding: silizium-net.de | Portfolio: Triton.ch.vu

Neue Antwort erstellen


Übersicht BlitzBasic Beginners-Corner

Gehe zu:

Powered by phpBB © 2001 - 2006, phpBB Group