Domanda

Qualcuno sa di un sistema grafico che gestisce la composizione di linee multiple di anti-alias bene?

sto mostrando un diagramma di dipendenza e hanno un sacco di curve che emanano da un punto. Questi sono disegnati anti-aliasing nel solito modo, di fusione dei pixel parzialmente coperti. Quindi se due linee occuperebbero lo stesso mezzo pixel, l'antialiasing fonde a 75% riempito invece del 50% riempito. Con le linee abbastanza disegnate su uno sopra l'altro, i morsetti di pixel si fondono e si finisce con linee alias.

So geometria anti-grano ha algoritmi per il calcolo miscele che si rivolgono per le linee che si attestano, e che oversampling potrebbe funzionare, ma ci sono altri approcci?

È stato utile?

Soluzione

La gestione di questo forma di composizione linea ben sta per essere lento (è necessario considerare tutte le linee che hanno un'incidenza sui ogni pixel utilizzando un approccio di rendering differito). Dubito che ci sono molti (se del caso) delle librerie là fuori che lo farà per voi.

Il metodo più semplice e veloce (e forse l'unica soluzione efficace realistica e dei costi per il vostro caso), che funzionerà con qualsiasi libreria di disegno potrebbe essere quella di sovracampiona esso - disegnare a una bitmap fuori schermo a risoluzione molto più alta (ad esempio 4 volte più ampia e più alta, con linee di 4 pixel larghezza. Disabilitare antialiasing nell'elaborazione questo in quanto sarà solo la rallentano) e poi scala il risultato giù con filtro bilineare. Il principale rovescio della medaglia è che utilizza molta memoria per la bitmap fuori schermo.

Altri suggerimenti

Se avete bisogno di un sistema esistente che ottiene linee di antialias "visivamente corretto", si potrebbe provare a utilizzare uno dei diversi rendering 3D esistenti RenderMan-compatibile. L'algoritmo REYES, che molti di questi rendering uso, funziona suddividendo primitive in micropolygons, poi campionamento in diverse posizioni del punto casuale all'interno di ciascun pixel. Quindi, anche se avete un milione di linee che oscurano collettivamente il 50% di un pixel, il valore immagine risultante mostrerà circa il 50% di copertura. (Questo è, ad esempio, come i milioni di peli con antialias sono disegnati su personaggi di molti film d'animazione).

Naturalmente, utilizzando un renderer conclamata 3D per disegnare le linee 2D è come guidare i chiodi con una mazza. Avreste bisogno di uno scenario abbastanza patologico per il renderer 3D per essere più efficace di un semplice supersampling con un renderer 2D tradizionale.

Sembra che si desidera una libreria di disegno premade, che io non conosco.

Tuttavia, per rispondere alla tua domanda di sapere qualsiasi approccio che avrebbe funzionato, si può considerare un pixel di essere un quadrato. È quindi possibile approssimare qualsiasi forma che si disegna come un poligono che interseca la casella di pixel. Con clipping questi poligoni contro la scatola del pixel e uno contro l'altro, è possibile ottenere una buona stima delle aree associate con ogni colore che interseca il pixel per antialiasing accurata. Questo è, naturalmente, molto lento da calcolare e non è adatto per il disegno interattivo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top