Рендеринг SVO: OpenGL или собственный рендерер?

Я планирую создать движок Sparce Voxel Octree (SVO) и застрял между использованием openGL для рендеринга каждого маленького куба или написания собственного рендерера на ассемблере и c. Если бы я собирался сделать последнее, я не знаю, как рисовать пиксели на экране (у меня Mac, 10.8). Какой графический контекст / оконная система будет предпочтительным методом для этого (не X, у меня есть проблемы с X на моем Mac).

P.S. движок должен иметь возможность рисовать не менее 50 000 кубов (я буду использовать opencl/cuda для параллельной обработки кубов). Я просто хочу знать, будет ли более эффективно рисовать через специально разработанный рендерер.


person Chase Walden    schedule 31.08.2012    source источник
comment
Если вы не хотите использовать CGL, тогда ваш выбор — AGL (Apple Graphics Library) или набор приложений Cocoa (API).   -  person kiranputtur    schedule 31.08.2012
comment
@ocluser Я знаю, какие библиотеки OpenGL я могу использовать. Мне было интересно, какие оконные системы я мог бы использовать или как я мог бы рисовать на экране.   -  person Chase Walden    schedule 01.09.2012


Ответы (1)


API

OpenGL является (в определенной степени) наиболее переносимым API рендеринга, и у вас есть, по крайней мере, шанс оставаться в курсе текущих возможностей графического оборудования, хотя это также регулярно вызывает его изрядную долю разочарования. Если вы программируете для ПК, вы можете использовать DirectX10/11, который предлагает более или менее ту же функциональность. DirectX имеет немного меньше накладных расходов на драйвер, в то время как OpenGL является конечным автоматом и довольно много чего скрывает от программиста. Я не уверен, как вы видите то же самое на ассемблере с меньшим количеством разочарований, если только под «asm» вы не подразумеваете написание шейдеров gsl или hlsl :)

Сво

Я написал визуализатор OpenGL SVO, который в настоящее время отображает 62 000 воксельных кубов со скоростью 30 кадров в секунду на GTX780, хотя мои настройки не оптимальны, т. в центральной координате блока и полностью сгенерировать визуал в шейдере. OpenGL предлагает целый набор способов оптимизации рендеринга, а также аппаратное ускорение.

Взаимодействие

Взаимодействие между openGL и openCL тривиально, и CUDA также достаточно хорошо интегрируется с буферами openGL. У меня обе эти настройки работают в одной кодовой базе. Третий вариант - использовать вычислительные шейдеры (opengl 4.3+), поэтому вам даже не нужны ни openCL, ни CUDA для обработки ваших кубов.

Планируете ли вы направлять лучи через svo, или просто отбраковывать контуры back-face, или делать что-то еще?

person StarShine    schedule 16.09.2014
comment
Просто для удовольствия я использовал инстансный рендеринг. Та же сцена теперь отображается со скоростью 56 кадров в секунду; то есть: каждый экземпляр имеет уникальный атрибут mvp и color. - person StarShine; 17.09.2014
comment
Дополнительная оптимизация (шейдеры, устаревшие функции opengl, фреймворк, виртуальные машины и т. д.) увеличила его до колоссальных 80 кадров в секунду. Тем не менее динамичная сцена с каждым mvp обновляется в каждом кадре! - person StarShine; 19.09.2014