Transparenz von Bildern
Übersicht

![]() |
MoochBetreff: Transparenz von Bildern |
![]() Antworten mit Zitat ![]() |
---|---|---|
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/ ::. |
![]() |
BladeRunnerModerator |
![]() Antworten mit Zitat ![]() |
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 ![]() Aber falls du eine recht akzeptable Pur-Quelltext-variante haben möchtest, sie m Code-Archiv nach (*g*) . *werbung* habe da mal was gebaut ![]() 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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
das wäre keine Transparenz und würde komisch aussehen :)
außerdem musst du weiterhin jeden Pixel selber setzen, was viel Zeit kostet. |
||
Kekskiller |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
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 |
![]() Antworten mit Zitat ![]() |
---|---|---|
Man kann doch einfach ein Sprite nehmen. Das sollte doch relativ schnell gehen oder? ![]() |
||
www.funforge.org
Ich hasse WASD-Steuerung. Man kann alles sagen, man muss es nur vernünftig begründen können. |
BIG BUG |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
@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) |
![]() |
MoochBetreff: Danke! |
![]() Antworten mit Zitat ![]() |
---|---|---|
@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/ ::. |
![]() |
MoochBetreff: Juhu! |
![]() Antworten mit Zitat ![]() |
---|---|---|
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/ ::. |
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group