Quindi, si vuole linee morbide senza:
- linea di levigatura.
- antialiasing a schermo intero.
- shader.
OK.
La soluzione migliore è utilizzare Alpha-Tested Magnification technique di Valve. L'idea di base, per le tue esigenze, è quella di creare una trama che rappresenti la distanza dalla linea, con il centro della trama a una distanza di 1,0. Questo potrebbe probabilmente essere una texture 1D.
Quindi, utilizzando le tecniche descritte nella carta (molte delle quali funzionano con funzione fissa, inclusa la versione antialiasing), traccia un quad che rappresenti le tue linee. Ovviamente avrai bisogno di una fusione alfa (e quindi non è indipendente dall'ordine). Usa la larghezza della tua linea per controllare la distanza alla quale diventa il colore appropriato, consentendo così di creare linee strette o larghe.
Fare questo con gli ombreggiatori è praticamente identico a quanto sopra, tranne senza la trama. Invece di accedere a una trama a distanza, la distanza viene passata e interpolata dal vertex shader. Per il bordo sinistro del quad, lo shader del vertice passa 0. Per il lato destro, passa 1. Si moltiplica questo per 2, si sottraggono 1 e si assume il valore assoluto.
Questa è la tua distanza dalla linea (la linea è il centro del quad). Quindi usa questa distanza esattamente come fa l'algoritmo di Valve.
fonte
2012-05-12 00:10:57
Vi siete escludere utilizzando quad strutturato, o quad con gradiente di colore? Sembra una soluzione possibile per me, anche se sembra che Edvard abbia già coperto quel territorio. – Tim
@Tim, hm, non sono sicuro che solo quad colorati funzioneranno esattamente come linee morbide, potrebbe diventare troppo nitido ... beh, devo provarlo. – Rookie
@Tim, l'ho testato ora, e come mi aspettavo, è troppo nitido (o troppo sfocato), ma per i miei scopi attuali funziona perfettamente! lo spessore della linea 1.7 sembra corrispondere molto bene a quello che fa la mia attuale linea liscia con spessore 1.1. – Rookie