Ich arbeite seit einiger Zeit an einer Grafikbibliothek und bin an einem Punkt angelangt, an dem ich Bezier- und linienbasierte Schriftarten zeichnen muss. Bis zu diesem Punkt stecke ich fest:
Die grünen Linien sind die Bezier-Pfade, und der weiße Teil wird gerendert.
Der Code, den ich für Beziers verwende, ist hier . Der für Linien ist hier . Für diejenigen, die das nicht wissen, ist Lua.
Pfadwiedergabe (Linien): 32 - 39 Der Algorithmus lautet wie folgt:
- Iteration von 0 nach 1 in bestimmten Intervallen
- Berechnen von x und y mit dieser Formel:
(1-index)^2*x1+2*(1-index)*index*x2+index^2*x3
Bis zu diesem Punkt funktioniert alles gut. Die grünen Linien werden mit der Pfadmethode generiert.
Der weiße Teil wird ganz anders gerendert:
- Ich bekomme die x-Koordinaten der Beziers und Linien bei einem bestimmten Y, die sie in eine Tabelle einfügen.
- Ich durchlaufe die Tabelle und ändere jedes Mal, wenn ich auf einen Punkt stoße, den Wert des Status. In der gleichen for-Schleife wird auch geprüft, ob der Status aktiviert ist. Wenn ja, zeichne ich ein Pixel auf den Bildschirm.
Um die x-Werte von ay zu finden, verwende ich die getX-Methode (Zeile 46 in Bezier und Zeile 31 in Zeile).
Der Code, den ich für die Zeichnung selbst verwende, ist folgender:
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
Kurze Erklärung: Für i durchläuft v paarweise die Tabelle, die Paaren als Argument gegeben wurde. love.graphics.points (x, y) setzt einen Punkt auf x, y.
Danke im Voraus.