Вот что я получил до сих пор. Я переписал код, чтобы немного упростить вещи. Предыдущий код на самом деле не был настоящим, базовым алгоритмом. Это был пух, который мне не нужен. Я ответил на вопрос о поле, и ниже вы увидите несколько изображений с результатами моего теста.
local function Line (buf, x1, y1, x2, y2, color, pitch)
-- identify the first pixel
local n = x1 + y1 * pitch
-- // difference between starting and ending points
local dx = x2 - x1;
local dy = y2 - y1;
local m = dy / dx
local err = m - 1
if (dx > dy) then -- // dx is the major axis
local j = y1
local i = x1
while i < x2 do
buf.buffer[j * pitch + i] = color
if (err >= 0) then
i = i + 1
err = err - 1
end
j = j + 1
err = err + m
end
else -- // dy is the major axis
local j = x1
local i = y1
while i < y2 do
buf.buffer[i * pitch + j] = color
if (err >= 0) then
i = i + 1
err = err - 1
end
j = j + 1
err = err + m
end
end
end
-- (visdata[2][1][576], int isBeat, int *framebuffer, int *fbout, int w, int h
function LibAVSSuperScope:Render(visdata, isBeat, framebuffer, fbout, w, h)
local size = 5
Line (self.buffer, 0, 0, 24, 24, 0xffff00, 24)
do return end
end
Редактировать: О, я только что понял. 0,0 находится в нижнем левом углу. Так что функция вроде работает, но она перекрывается и наклонена.
Редактировать2:
Да, все это сломано. Я вставляю числа в Line () и получаю всевозможные результаты. Позвольте мне показать вам немного.
Вот Line (self.buffer, 0, 0, 23, 23, 0x00ffff, 24 * 2)
А вот и Line (self.buffer, 0, 1, 23, 23, 0x00ffff, 24 * 2)
Редактировать: Вау, выполнение Line (self.buffer, 0, 24, 24, 24, 0x00ffff, 24 * 2)
использует слишком много процессорного времени.
Редактировать: Вот еще одно изображение с использованием этого алгоритма. Желтые точки являются отправной точкой.
Line (self.buffer, 0, 0, 24, 24, 0xff0000, 24)
Line (self.buffer, 0, 12, 23, 23, 0x00ff00, 24)
Line (self.buffer, 12, 0, 23, 23, 0x0000ff, 24)
Редактировать: И да, эта синяя линия обтекает.