Bit blit: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica |
m →Altri progetti: Aggiunto il parametro "Preposizione" nel template "Interprogetto" |
||
(27 versioni intermedie di 8 utenti non mostrate) | |||
Riga 1:
Il termine '''Bit blit''', che sta per '''''bit'''
▲Il termine '''Bit blit''', che sta per ''bit block transfer'' (scritto anche '''BITBLT''', '''BIT BLT''', '''BitBLT''', '''Bit BLT''', '''Bit Blt''' ecc..), indica un'operazione di [[computer grafica]] nella quale una o più [[bitmap]] sono combinate insieme utilizzando una [[algebra di Boole|funzione booleana]].<ref name="Sanchez"/>
== Descrizione ==
Una bit blit coinvolge almeno 2 bitmap, quella di origine e quella di destinazione. Possono essere coinvolte anche altre bitmap: in questo caso esse vengono utilizzate come "maschere", per modificare i bit della bitmap di origine. Le funzioni booleane che possono essere applicate sono [[Congiunzione logica|AND]], [[Disgiunzione logica|OR]], [[Disgiunzione esclusiva|XOR]] e [[Negazione (matematica)|NOT]], usate singolarmente oppure combinate a formare funzioni più complesse.<ref name=atari_blitter>{{cita web|url=http://paradox.atari.org/files/BLIT_FAQ.TXT|titolo=BLIT FAQ|editore=Paradox Atari|accesso=20/05/2015|urlarchivio=https://web.archive.org/web/20160305191232/http://paradox.atari.org/files/BLIT_FAQ.TXT#|dataarchivio=5 marzo 2016|urlmorto=sì}}</ref><ref name="Sanchez">{{cita libro|cognome=Sanchez|nome=Julio|coautori=Maria P. Canton|titolo=Software solutions for engineers and scientists|editore=CRC Press|anno=2007|pagine=690|capitolo=Displaying Bit-Mapped images}}</ref>
Le moderne tecniche di grafica hanno quasi del tutto sostituito le operazioni eseguite sui singoli bit con altre che creano effetti grafici più complessi, come la manipolazione del [[canale alfa]], per via del fatto che le bit blip non permettono di ottenere risultati che rispecchiano i reali effetti di combinazione di luci o inchiostri. Alcuni programmi utilizzano ancora un'operazione di XOR per tracciare rettangoli di evidenziatura: usando questa tecnica è possibile infatti ottenere una trama di riempimento inusuale, che ben si evidenzia dal resto dell'immagine.<ref>{{cita web|url=
== Origini ==
Il nome Bit blit deriva
== Blitting e sprite ==
{{vedi anche|Sprite (informatica)}}
Nonostante entrambe le tecniche abbiano come risultato finale quello di gestire delle figure grafiche sovrapposte ad un'immagine di sfondo, il modo in cui questo viene ottenuto differenzia in modo sostanziale i bit blit dagli sprite hardware. Mentre il bit blit scrive dinamicamente i dati dell'immagine da sovrapporre nel buffer video (tecnica che prende il nome di "blitting") uno sprite hardware è gestito da un circuito specifico che sovrappone la sua immagine a quella principale, in maniera simile ad un "fantasma" o uno "spirito".<ref name=bomb>{{cita web|url=https://www.giantbomb.com/sprite/3015-491/|titolo=Sprite (concept)|editore=Giantbomb.com|accesso=09/01/2018}}</ref><ref name=arcade>{{cita web|url=http://ca.olin.edu/2005/fpga_sprites/new_plan.htm|titolo=Building a hardware sprite|editore=Arcade Hardware Design|accesso=09/01/2018}}</ref> Il blitting è un metodo che lascia al programmatore ampia libertà d'azione dato che i dati possono essere cambiati continuamente e vi sono meno restrizioni sulle dimensioni delle immagini da sovrapporre. Per contro, questa tecnica necessita di un sistema ad alte prestazioni (CPU e/o chip grafico molto veloci) ed un maggior quantitativo di RAM, necessario a gestire il buffer video ed i dati delle immagini da sovrapporre.<ref name=bomb/> Gli sprite hanno il difetto di presentare un limite al numero di questi oggetti che possono venire gestiti via hardware ma offrono comunque il vantaggio di poter essere spostati sullo schermo con un carico sul software molto basso.<ref name=bomb/>
Gli sprite sono stati il principale sistema di animazione su sistemi con potenza di calcolo e memoria limitati, come le [[console (videogiochi)|console]] e gli [[home computer]] degli [[anni 1980|anni '80]] del [[XX secolo]]. Anche i [[Videogioco arcade|videogiochi arcade]] di quel periodo hanno usato prevalentemente gli sprite dato che la loro gestione era fatta da hardware apposito, che alleggeriva i calcoli che gravavano sulla CPU, e che permettevano di utilizzare un minor quantitativo di RAM non essendo creati dinamicamente, visto che erano già predefiniti nella memoria non volatile del sistema.<ref name=arcade/> Con l'aumentare della memoria e della potenza di calcolo dei sistemi gli sprite sono stati lentamente sostituiti dalle operazioni di blitting.<ref name=bomb/>
== Blitter ==
[[File:Atari Blitter.jpg|thumb|right|L''''Atari Blitter''' integrato
In seguito, per accelerare ulteriormente i calcoli ed alleggerire il carico di lavoro sulle [[CPU]] le tecniche di bit blit furono implementate anche in [[hardware]] mediante lo sviluppo di appositi [[coprocessore|coprocessori]] denominati '''Blitter'''.
Il Blitter di Amiga fu così famoso e
== Le moderne GPU ==
Le moderne [[Graphics Processing Unit|GPU]], discendenti dei primi chip blitter, eseguono operazioni di [[grafica 3D]] molto più complesse ed avanzate rispetto alle semplici bit blit a 2D,<ref>{{cita web|url=http://www.blitterandtwisted.com/2011/04/technology-that-changed-gaming-2-the-commodore-amiga.html|titolo=Technology that changed the gaming: the Commodore Amiga|editore=BlitterAndTwisted|accesso=24/05/2015|urlarchivio=https://web.archive.org/web/20150524174458/http://www.blitterandtwisted.com/2011/04/technology-that-changed-gaming-2-the-commodore-amiga.html|dataarchivio=24 maggio 2015|urlmorto=sì}}</ref> ciò nonostante in alcune di esse sono ancora presenti delle unità blitter.<ref>{{cita web|url=http://renderingpipeline.com/graphics-literature/low-level-gpu-documentation/|titolo=Elenco di link alla documentazione delle unità blitter di alcune moderne GPU|editore=Renderingpipeline.org|accesso=24/05/2015|dataarchivio=24 maggio 2015|urlarchivio=https://web.archive.org/web/20150524180442/http://renderingpipeline.com/graphics-literature/low-level-gpu-documentation/|urlmorto=sì}}</ref>. Anche alcuni [[System-on-a-chip|SoC]] integrano delle unità blitter, come ad esempio quelli prodotti da [[Texas Instruments]].<ref>{{cita web|url=http://processors.wiki.ti.com/index.php/Bitblit_Users_Guide|titolo=Bitblit User's Guide|editore=Texas Instruments|accesso=24/05/2015|dataarchivio=24 maggio 2015|urlarchivio=https://web.archive.org/web/20150524174301/http://processors.wiki.ti.com/index.php/Bitblit_Users_Guide|urlmorto=sì}}</ref>
== Implementazione ==
Un uso comune delle operazioni di bit blit è quello della gestione degli sprite. Nell'esempio seguente l'immagine di sinistra rappresenta lo sfondo su cui operare mentre a destra sono presenti gli sprite da applicare e la corrispondente maschera.
{| class="wikitable"
|-
! Immagine di fondo
! Sprite (sinistra)<br/>e maschera (destra)
|-
|align="center"| [[File:Blit back.png]]
|align="center"| [[File:Blit dot.png]]
|}
Durante il primo passaggio la maschera viene soprapposta all'immagine di fondo con un'operazione di [[Congiunzione logica|AND logico]]: nella maschera un bit bianco (di valore 1) indica un pixel da preservare nell'immagine di fondo mentre un bit nero (di valore 0) indica un pixel su cui verrà applicato lo sprite. Dato che nell'AND logico qualunque valore combinato con 1 resta inalterato (1 AND 1 = 1 e 0 AND 1 = 0) i bit bianchi non modificano i corrispondenti pixel dell'immagine di fondo; viceversa, l'AND di un bit con il valore 0 da sempre come risultato 0 (1 AND 0 = 0 e 0 AND 0 = 0) per cui i bit che nella maschera hanno valore 0 creano un pixel nero nell'immagine di fondo. Siccome la maschera è ad 1 bit, non vi è possibilità di applicare nessun effetto di [[alpha blending]].<ref name=atari_blitter/>
Dopo l'applicazione della maschera il risultato è il seguente:
{| class="wikitable"
|-
!Primo passaggio<br/>(AND logico della<br/>maschera)
|-
|align="center"| [[File:Blit and.png]]
|}
Come detto, le zone nere sono quelle che andranno ad accogliere gli sprite, che vengono aggiunti all'immagine usando un'operazione di [[Disgiunzione logica|OR logico]]:
{| class="wikitable"
|-
!Secondo passaggio<br/>(OR logico<br/>degli sprite)
|-
|align="center"| [[File:Blit final.png]]
|}
== Note ==
Line 21 ⟶ 60:
== Voci correlate ==
* [[Grafica raster]]
== Altri progetti ==
{{interprogetto|preposizione=sul}}
{{Portale|informatica}}
|