-
Ma saro` divertente? Il Blog di Altg Quando poi non ci sono vi manco, teneroniScritto daaltgutente che non utieneil 2014-03-12 01:38:55.0 alle 2014-03-12 01:38:55.0Trollate totali: 11540
Rasterizer.prototype.fillPlainClear = function () { var S = this.T, P = this.L [S] - 1, E = this.H [S] + 1, L = this.w * S, T = L + 4 * P, Q2 = this.Q [2] - this.Q [1], Q5 = this.Q [5] - this.Q [4], Q8 = this.Q [8] - this.Q [7], e; while (1) { while (P <= E) { if (Q2 <= 0 && Q5 <= 0 && Q8 <= 0) { this.D [T] = this.z; this.D [T + 1] = this.i; this.R [T] = this.r; this.R [T + 1] = this.g; this.R [T + 2] = this.b; } P += 1; T += 4; Q2 += this.Q [1]; Q5 += this.Q [4]; Q8 += this.Q [7]; } if (++ S > this.B) { return; } P = this.L [S] - 1; E = this.H [S] + 1; L = L + this.w; e = this.L [S] - this.L [S - 1]; T = L + 4 * P; this.Q [2] += e * this.Q [1] - this.Q [0]; this.Q [5] += e * this.Q [4] - this.Q [3]; this.Q [8] += e * this.Q [7] - this.Q [6]; Q2 = this.Q [2] - this.Q [1]; Q5 = this.Q [5] - this.Q [4]; Q8 = this.Q [8] - this.Q [7]; this.L [S - 1] = +10000; this.H [S - 1] = -10000; } };
Che c'e` di divertente?
Scrivere coi nomi delle variabili.
Bah... comunque, piu` che altro spiega la roba che mi sta tenendo impegnato e senza aggiornamenti in forma di snapshots su Cydonia. Sto ricostruendo il rasterizzatore e i pixel shaders perche` il meshing era imperfetto. Al costo di tre incrementi per pixel (i "Q") sono passato alla risoluzione delle funzioni dei bordi (sistema di disequazioni). Il pixel e` nel triangolo quando i segni delle funzioni dei tre lati del triangolo, in un dato punto (Q2, Q5, Q8), sono concordi e negativi (o nulli, anche se serve a coprire bordi infinitesimali in casi molto particolari). In questo modo i triangoli adiacenti s'incastrano pixel per pixel e permettono aggiornamenti incrementali dello stencil senza artefatti dovuti a passaggi doppi o mancanze di copertura. Per individuare comunque dei minimi e massimi indicativi ho tenuto comunque il Bresenham, che ha un errore massimo di +/- un pixel, sicche` i pixel shaders partono incondizionatamente da un pixel piu` a sinistra del minimo e arrivano un pixel piu` a destra. Ma vabbe', e` una lunga storia (anche triste, visto che e` stata quanto mai pallosa).
Pero` l'autotrollata nel frammento di codice che disegna i cieli di sfondo meritava di essere vista.
-
Re: Ma saro` divertente?Scritto daaltgutente che non utieneil 2014-03-12 11:44:41.0 alle 2014-03-12 11:44:41.0Trollate totali: 11540C'era un errorino, comunque. E anche una perdita di tempo. Non resettava minimo e massimo dell'ultima scanline, e incrementava inutilmente i valori delle funzioni e la target pixel location (T) dopo l'ultimo pixel di una scanline.
Rasterizer.prototype.fillPlainClear = function () { var S = this.T, P = this.L [S] - 1, E = this.H [S] + 1, L = this.w * S, T = L + 4 * P, Q2 = this.Q [2] - this.Q [1], Q5 = this.Q [5] - this.Q [4], Q8 = this.Q [8] - this.Q [7], e; while (1) { while (1) { if (Q2 <= 0 && Q5 <= 0 && Q8 <= 0) { this.D [T] = this.z; this.D [T + 1] = this.i; this.R [T] = this.r; this.R [T + 1] = this.g; this.R [T + 2] = this.b; } if (++ P > E) { break; } T += 4; Q2 += this.Q [1]; Q5 += this.Q [4]; Q8 += this.Q [7]; } if (++ S > this.B) { this.L [S - 1] = +10000; this.H [S - 1] = -10000; return; } P = this.L [S] - 1; E = this.H [S] + 1; L = L + this.w; e = this.L [S] - this.L [S - 1]; T = L + 4 * P; this.Q [2] += e * this.Q [1] - this.Q [0]; this.Q [5] += e * this.Q [4] - this.Q [3]; this.Q [8] += e * this.Q [7] - this.Q [6]; Q2 = this.Q [2] - this.Q [1]; Q5 = this.Q [5] - this.Q [4]; Q8 = this.Q [8] - this.Q [7]; this.L [S - 1] = +10000; this.H [S - 1] = -10000; } };
Ora e` peFFetta.
-
Re: Ma saro` divertente?Scritto daaltgutente che non utieneil 2014-03-12 18:56:00.0 alle 2014-03-12 18:56:00.0Trollate totali: 11540Oh, comunque una figurina da mostrare ce l'ho, non e` che il motorino grafico sia smantellato, e` solo fresco di ristrutturazione generale:

La scena sta essendo (sic) ricostruita, aggiungendo i vecchi elementi man mano che vengono ri-supportati. Il notevole e` la pulizia del rendering, che ora sbaglia ben pochi pixel, e quando succede e` per via dell'inevitabile bias fisso sulla profondita` dei "tappini" anteriori delle ombre. Si tratta di qualche puntino (quarto di pixel, in quadscan) scuro ogni tanto: a ingrandire la snapshot se ne nota qualcuno sui lastroni allineati per terra. Ma la precisione, adesso, la giudico piu` che accettabile.
Ah si`, poi provero` a metterci anche la sfumatura sulle ombre (che a cercare un po' ho scoperto chiamarsi semplicemente penombra, non diffrazione ne` diffusione). Per ora devo addestrare il cerca-adiacenze a considerare la loose geometry come possibile proiettore di ombre, cosi` posso ombreggiare tutte le singole fogline della siepe e tutti i fili d'erba futuri (sperando che la quantita` di volumi d'ombra risultante non porti il browser a fanculizzarmi con un alert "oh, hai rotto il cazzo").-
Re: Ma saro` divertente?Scritto daNon Autenticatoil 2014-03-12 19:46:33.0 alle 2014-03-12 19:46:33.0> Oh, comunque una figurina da mostrare ce l'ho, non e` che il motorino grafico sia smantellato, e` solo fresco di ristrutturazione generale:
>
>
WOW! Adesso manca solo più l'antialiasing.
> La scena sta essendo (sic) ricostruita, aggiungendo i vecchi elementi man mano che vengono ri-supportati. Il notevole e` la pulizia del rendering, che ora sbaglia ben pochi pixel, e quando succede e` per via dell'inevitabile bias fisso sulla profondita` dei "tappini" anteriori delle ombre. Si tratta di qualche puntino (quarto di pixel, in quadscan) scuro ogni tanto: a ingrandire la snapshot se ne nota qualcuno sui lastroni allineati per terra. Ma la precisione, adesso, la giudico piu` che accettabile.
>
> Ah si`, poi provero` a metterci anche la sfumatura sulle ombre (che a cercare un po' ho scoperto chiamarsi semplicemente penombra, non diffrazione ne` diffusione).
(cerca su Wikipedia)
La penombra è l'effetto, la cui causa è la diffusione dei fotoni da parte degli spigoli. Se la diffusione avvenisse a scale e lunghezze d'onda tali da generare fenomeni ondulatori (ad esempio luce che passa da un foro piccolo) avremmo la diffrazione.
> Per ora devo addestrare il cerca-adiacenze a considerare la loose geometry come possibile proiettore di ombre, cosi` posso ombreggiare tutte le singole fogline della siepe e tutti i fili d'erba futuri (sperando che la quantita` di volumi d'ombra risultante non porti il browser a fanculizzarmi con un alert "oh, hai rotto il cazzo").
Questo volevo sentirti dire!
-
Re: Ma saro` divertente?Scritto da: altg
> Oh, comunque una figurina da mostrare ce l'ho, non e` che il motorino grafico sia smantellato, e` solo fresco di ristrutturazione generale:
Vedo che il tempo di rendering e' quasi di un secondo. Per me facevi prima a usare il motore di Quake, che c'avevi pure i mostri e le pistolone licchionose ....`"la realta' non e' cosi' terrificante come vogliono farti credere" - Giambo ` - Wakko che cita Giambo-
Re: Ma saro` divertente?Scritto daNon Autenticatoil 2014-03-12 21:20:39.0 alle 2014-03-12 21:20:39.0Scritto da: Giambo
> Scritto da: altg
> > Oh, comunque una figurina da mostrare ce l'ho, non e` che il motorino grafico sia smantellato, e` solo fresco di ristrutturazione generale:
>
> Vedo che il tempo di rendering e' quasi di un secondo. Per me facevi prima a usare il motore di Quake, che c'avevi pure i mostri e le pistolone licchionose ....
Non attacca. È quando avete messo in dubbio la futura redditività del software che si è arrabbiato.
-
-
-