私はしばらくの間グラフィックライブラリに取り組んでおり、ベジエフォントとラインベースのフォントを描画しなければならないところまで到達しました。この時点まで、私はこれで立ち往生しています:
緑の線はベジェパスで、白い部分がレンダリングされます。
ベジエに使用するコードはこちらです。ライン用はこちら。知らない人はルアです。
パスレンダリング(ライン):32-39アルゴリズムは次のとおりです。
- 特定の間隔で0から1まで繰り返す
- 次の式でxとyを計算します。
(1-index)^2*x1+2*(1-index)*index*x2+index^2*x3
この時点まで、すべてが正常に動作します。緑の線は、パスメソッドを使用して生成されます。
白い部分は完全に異なる方法でレンダリングされます:
- 特定のYでのベジエと線のx座標を取得し、それらをテーブルに入れます。
- テーブルを繰り返し処理し、ポイントに遭遇するたびに状態の値を変更します。同じforループで、状態がオンかどうかも確認します。もしそうなら、私は画面にピクセルを描画します。
ayのx値を見つけるには、getXメソッドを使用します(ベジェでは46行目、ラインでは31行目)。
図面自体に使用するコードは次のコードです。
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
簡単な説明:i、vはペアで、ペアの引数として指定されたテーブルを反復処理します。love.graphics.points(x、y)は、x、yにポイントを設定します。
前もって感謝します。