Tôi đã làm việc trên một thư viện đồ họa một thời gian và đã đến lúc tôi phải vẽ Bezier và các phông chữ dựa trên dòng. Cho đến thời điểm này tôi bị mắc kẹt với điều này:
Các đường màu xanh lá cây là các đường dẫn Bezier và phần màu trắng là những gì được hiển thị.
Mã tôi sử dụng cho Beziers là ở đây . Một trong những dòng là ở đây . Đối với những người không biết đó là Lua.
Kết xuất đường dẫn (dòng): 32 - 39 Thuật toán như sau:
- Lặp lại từ 0 đến 1 tại các khoảng thời gian nhất định
- tính x và y với công thức này:
(1-index)^2*x1+2*(1-index)*index*x2+index^2*x3
Cho đến thời điểm này mọi thứ hoạt động tốt. Các đường màu xanh lá cây được tạo bằng phương pháp đường dẫn.
Phần màu trắng được hiển thị theo một cách hoàn toàn khác:
- Tôi nhận được tọa độ x của Beziers và các dòng tại một Y cụ thể, đặt chúng vào một bảng.
- Tôi lặp qua bảng và mỗi lần tôi gặp một điểm tôi thay đổi giá trị của trạng thái. Trong cùng một vòng lặp cũng là kiểm tra xem trạng thái được bật. Nếu có, tôi vẽ một pixel lên màn hình.
Để tìm giá trị x của ay, tôi sử dụng phương thức getX (dòng 46 trong Bezier và dòng 31 trong Dòng).
Mã tôi sử dụng cho bản vẽ là mã này:
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
Giải thích nhanh: cho i, v theo cặp lặp qua bảng được đưa ra làm đối số cho các cặp. love.graphics.point (x, y) đặt điểm tại x, y.
Cảm ơn trước.