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