Bit blit: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
m Altri progetti: Aggiunto il parametro "Preposizione" nel template "Interprogetto"
 
(16 versioni intermedie di 6 utenti non mostrate)
Riga 2:
 
== 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=httphttps://eclipse.org/articles/Article-SWT-graphics/SWT_graphics.html#XOR|titolo=Graphics Context - Quick on the draw: XOR|editore=Eclipse.org|accesso=24/05/2015}}</ref>
 
== Origini ==
Il nome Bit blit deriva dalleda quello delle routine che gli sviluppatori software dello [[Xerox PARC]] crearono per gestire la grafica dei computer che progettarono negli [[anni 1970|anni settanta]], come lo [[Xerox Alto]], il primo computer a essere messo in commercio con un'interfaccia grafica basata sulla metafora della scrivania: le routine erano denominate ''Bit BLT'' e servivano per semplificare la gestione dell'immagine ed il tracciamento degli oggetti mediante lo spostamento di blocchi di dati all'interno della memoria video del computer. IlA nomeloro derivavavolta le Bit BLT traevano spunto per il nome da "BLT", che era un'istruzione [[assembly]] dei computer [[Digital Equipment Corporation|DEC]] [[PDP-10]] atta a spostare blocchi di memoria. Le routine Bit BLT erano alla base di tutte le operazioni grafiche gestite tramite il linguaggio [[Smalltalk]] sui sistemi progettati allo XEROX PARC.<ref>{{cita libro|editore=Microsoft Press|autore=Charles Peztold|anno=1998|titolo=Programming Windows by Charles Peztold|url=https://www-user.tu-chemnitz.de/~heha/petzold/petzold.htm|capitolo=14-Bitmaps and bitblips|url_capitolo=https://www-user.tu-chemnitz.de/~heha/petzold/ch14d.htm}}</ref>Lo sviluppo fu condotto da [[Dan Inglass]] e dal suo gruppo, composto da Larry Tesler, Bob Sproull e Diana Merry.<ref name=alto>{{cita web|url=http://www.catb.org/esr/writings/taouu/html/ch02s05.html|titolo=The first GUIs|capitolo=Chapter 2. History: A Brief History of User Interfaces|autore=Eric Steven Raymond|accesso=24/05/2015}}</ref><ref>{{cita web|url=http://bitsavers.informatik.uni-stuttgart.de/pdf/xerox/alto/BitBLT_Nov1975.pdf|titolo=Inter-Office Memorandum - Bit BLT|editore=Xerox PARC|accesso=24/05/2015|autore=Dan Inglass}}</ref>
 
== 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 nei modelli più recenti dell'[[Atari ST]].]]
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'''. Nonostante tra gli [[anni 1970|anni settanta]] ed i primi [[anni 1980|anni ottanta]] fossero stati sviluppati già dei [[Video Display Controller|controller video]] capaci di eseguire anche operazioni di bit blit, il primo vero chip sviluppatoprogettato e creato solo per questo scopo fu l''''Amiga Blitter''', integrato nel [[Original Chip Set|chipset originale]] dei primi computer [[Amiga]]: esso era in grado di spostare o modificare blocchi rettangolari di grafica ma anche disegnare singole linee dell'immagine.<ref>{{cita web|url=http://amigadev.elowar.com/read/ADCD_2.1/Hardware_Manual_guide/node0119.html|titolo=Caratteristiche dell'Amiga Blitter|accesso=24/05/2015|editore=Amiga Developers Docs}}</ref>
 
Il Blitter di Amiga fu così famoso e fondamentale per il successo del computer che anche [[Atari Corporation]] decise di svilupparne uno da integrare nelle versioni aggiornate dell'[[Atari ST]], i modelli Mega e STE. Denominato '''BLiTTER''', ''BLock Image TransferrER'', non fu però molto utilizzato perché gli sviluppatori software tendevano a produrre giochi e programmi compatibili anche con i modelli più vecchi, che ne erano sprovvisti.<ref>{{cita web|url=http://www.sillyventure.eu/eng_blitter|titolo=Appearance of BLiTTER|editore=SillyVenture|urlmorto=sì|urlarchivio=https://web.archive.org/web/20141029091412/http://sillyventure.eu/eng_blitter|dataarchivio=29 ottobre 2014}}</ref><ref>{{cita web|url=http://paradox.atari.org/files/BLIT_FAQ.TXT|titolo=Atari ST(E) BLiTTER|editore=Paradox.atari.org|accesso=24/05/2015|urlarchivio=https://web.archive.org/web/20160305191232/http://paradox.atari.org/files/BLIT_FAQ.TXT#|dataarchivio=5 marzo 2016|urlmorto=sì}}</ref> Atari integrò un blitter anche nelle sue [[console (videogiochi)|console]] [[Atari Lynx]] e [[Atari Jaguar]].
 
== 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 23 ⟶ 60:
== Voci correlate ==
* [[Grafica raster]]
 
== Altri progetti ==
{{interprogetto|preposizione=sul}}
 
{{Portale|informatica}}