LINUX.ORG.RU

Быстрая попиксельная отрисовка изображения

 ,


0

1

Есть задача - реализовать алгоритм Ray tracing на C++ без использования дополнительных библиотек (Boost и STL не считаются). Библиотеки обработки 3D графики использовать нельзя. Из функций рисования на окне/фрэйме можно использовать только функцию очистки области и установки цвета пикселя. Вопрос следующий: чем можно быстро выводить изображение попиксельно? Где-то в интернетах советуют использовать SDL2: «рисовать» в буфер, а потом копировать его. Только вот меня терзают сомнения, что это будет достаточно быстро. Что посоветуете?

Библиотеки обработки 3D графики использовать нельзя
Где-то в интернетах советуют использовать SDL2

Взаимоисключающие параграфы же?

«рисовать» в буфер, а потом копировать его. Только вот меня терзают сомнения, что это будет достаточно быстро. Что посоветуете?

быстро не войлнуйся. Много быстрее, чем рисовать по пикселям на окошке

anonymous ()
Ответ на: комментарий от anonymous

Взаимоисключающие параграфы же?

Нет, в SDL/SDL2 нет 3D. Они только предоставляют surface, куда можно, например, выводит из OpenGL или ручками.

А про скорость - собственно, других вариантов-то и нет. Самый распространенный на сегодня подход.

JaneDoe ()

double buffer + blit surface — всё это в sdl есть. (SDL_BlitSurface, SDL_Flip ...)

Относительно простой пример тут.

beastie ★★★★★ ()
Последнее исправление: beastie (всего исправлений: 3)

Тебе в академических целях?

invy ★★★★★ ()

Берешь такой книжку "Математические основы машинной графики", и кодишь псевдокод-примеры оттуда на С++, пофиг что ничего не поймешь :)

Вопрос следующий: чем можно быстро выводить изображение попиксельно?
Где-то в интернетах советуют использовать SDL2: «рисовать» в буфер, а потом копировать его. Только вот меня терзают сомнения, что это будет достаточно быстро. Что посоветуете?

Пральна советуют. Ну можешь еще в волшебный олдскульный мир SVGA окунуться. Но зачем? Для учебных/демо целей сойдет все и любое с двойным буфером и возможностью нарисовать точку в нужном месте. SDL в этом смысле искаропки дает тебе аппаратное ускорение. Все остальное уже разжевано многа раз на разных примерах из «демосцены», цельнотянутых из книжек по машграфу.

slackwarrior ★★★★★ ()
Последнее исправление: slackwarrior (всего исправлений: 1)

Рисуй в SDL поверхность, потом выводи её.

slovazap ★★★★★ ()
Ответ на: комментарий от JaneDoe

Нет, в SDL/SDL2 нет 3D

Ложь. В SDL нет 3D, а у SDL2 под капотом уже OpenGL и текстуры.

slovazap ★★★★★ ()
Ответ на: комментарий от slovazap

а у SDL2 под капотом уже OpenGL и текстуры.

Никто тебе не мешает не грузить картинки, а выводить пиксели :)

slackwarrior ★★★★★ ()
Ответ на: комментарий от slovazap

Под капотом у нее может быть хоть двигатель от Камаза. Библиотека для пользователя — это, прежде всего, интерфейс. В интерфейсе SDL2 нет никаких функций для рисования 3д-графики, кроме отдельных пикселей, прямоугольников в плоскости экрана и возможности задействовать OpenGL.

JaneDoe ()

Только вот меня терзают сомнения, что это будет достаточно быстро

Я так делаю. На на полной перерисовке 1.44 мегапиксела могу иметь вполне годные 200 фпс. Параллельно ещё математика всякая. Проц, правда, горит. Если использовать SIMD, то вообще можно не париться насчёт отрисовки, но уменя SIMD пока нету в программе.

anonymous ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.