Ho lavorato su una libreria grafica da qualche tempo e sono arrivato al punto in cui devo disegnare Bezier e caratteri basati su linee. Fino a questo punto sono bloccato con questo:
Le linee verdi sono i percorsi di Bezier e la parte bianca è ciò che viene reso.
Il codice che uso per Beziers è qui . Quello per le linee è qui . Per coloro che non sanno che è Lua.
Rendering del tracciato (linee): 32 - 39 L'algoritmo è il seguente:
- Iterazione da 0 a 1 a determinati intervalli
- calcolando xey con questa formula:
(1-index)^2*x1+2*(1-index)*index*x2+index^2*x3
Fino a questo punto tutto funziona bene. Le linee verdi sono generate usando il metodo path.
Il rendering della parte bianca è completamente diverso:
- Ottengo le coordinate x di Beziers e le linee in una Y particolare, le metto in una tabella.
- Esamino la tabella e ogni volta che incontro un punto cambio il valore di stato. Allo stesso modo per il ciclo è anche verificare se lo stato è attivo. Se lo è, disegno un pixel sullo schermo.
Per trovare i valori x di ay, uso il metodo getX (riga 46 in Bezier e riga 31 in Line).
Il codice che uso per il disegno stesso è questo:
local xBuffer = {}
local state = false
for i=0,500 do
for k,v in pairs(beziers) do
a,b = v.getX(i)
if a then
xBuffer[round(a)] = 1
if b then
xBuffer[round(a)] = 1
end
end
end
for k,v in pairs(lines) do
a = v.getX(i)
if a then
xBuffer[round(a)] = 1
end
end
state = false
for x=0,600 do
if xBuffer[x] then
state = not state
end
if state then
love.graphics.points(x,i)
end
end
end
Spiegazione rapida: per i, v in coppie scorre la tabella fornita come argomento alle coppie. love.graphics.points (x, y) imposta un punto su x, y.
Grazie in anticipo.