Начните с черного выходного буфера. Забудьте о субпикселе на данный момент. Каждый кадр, каждый пиксель делают это:
outbuff = макс (outbuff, inbuff);
Выполните субпиксельную фильтрацию в третий «чистый» буфер, когда закончите с изображением. Или сделать кусок или строку экрана одновременно в режиме реального времени. Преимущество: «грубый» вид чертежа в режиме реального времени, очищенный по мере движения.
Когда вы конвертируете из чернового выходного буфера в «чистый» третий буфер, вы можете очистить черновой цвет от черного. Это позволяет вам рисовать вечно без замедления.
Если вы нарисуете «чистый» поверх «грубого», возможно, немного другого цвета, вы получите лучшее из обоих миров.
Это похоже на то, что делают программы рисования - если вы рисуете очень быстро, вы видите черновую версию, тогда программа рисования "очищает" изображение, когда у него есть время.
Некоторые комментарии к алгоритму:
Я видел много читов на этой арене. Я играл в Sonic на эмуляторе Sega Genesis, который сэмплировал. и у него есть несколько довольно диких алгоритмов, которые работают очень хорошо и очень быстро.
У вас действительно есть некоторые преимущества, которые вы можете получить, потому что вы знаете яркость и радиус на точке.
Вы можете просто посмотреть на каждый пиксель и его 8 соседей и позволить этим 9 пикселям «голосовать» в соответствии с их яркостью относительно того, где находится субпиксель.
Другие мысли
Ваша рука не настолько точна, когда вы управляете лазерной указкой. Попробуйте получать все точки каждые 10 кадров или около того, определяя, какие лучи есть какие (на основе предыдущего движения и учитывая новые точки, отключенные лазеры и точки, которые вошли в поле зрения или покинули его), затем просто рисуйте максимум Кривая разрешения. Не беспокойтесь о субпикселе на входе - просто нарисуйте кривую на выходе высокого разрешения.
Используйте сплайн Catmull-Rom, который проходит через все контрольные точки.