Быстрое 2D рисование линий
Несколько месяцев назад я написал в C++ (высококачественный) дзен-фотон- рипофф, и я хочу начать с нуля. Было довольно весело, и мне удалось получить хорошие результаты. Самым большим узким местом производительности была часть рисования линий, поскольку мне нужно рисовать миллионы линий, чтобы "проследить лучи".
В итоге я использовал код Мики Элизабет Скотт непосредственно для ее github, который был быстрее, чем все методы, которые я пробовал. Но мне было интересно, как я могу рисовать линии еще быстрее. Дело в том, что мне нужно не только нарисовать миллионы линий, но и "сложить их".
Моя программа была разделена на две основные задачи. Первый состоял в случайном отбрасывании лучей от источников света, расчете пересечений с объектами, отражении их и т. Д.
Вторая часть рисовала линии. Конечное изображение было представлено в виде простого двойного вектора (3x64 бита для каждого пикселя), и рисование линии состояло в добавлении значений к этому вектору. Конкретно, когда я использовал алгоритм Брезенхэма, я сделал +=1 для ячеек вектора, соответствующих пикселям, по которым проходит линия.
Изображение было визуализировано путем сопоставления значений этого массива с [0,255]. Затем я мог бы поиграть с яркостью, сделать гамма-коррекцию и т. Д.
Я попробовал демо-коды OpenGL и Cairo для рисования линий. Но я не мог получить желаемое поведение: добавление строк в массив пикселей (или поверхности, буфера или чего-либо еще) с хорошей точностью, а затем рендеринг изображения из этого массива.
Есть ли у вас какие-либо идеи о том, как я могу быстро рисовать линии друг над другом, чтобы я мог ими манипулировать, как я только что описал?