Пользовательский рендеринг с GPU, Direct3D или OpenGL - PullRequest
0 голосов
/ 30 января 2019

У меня есть приложение для Windows, которое в настоящее время визуализирует графику в основном с использованием MFC, которое я хотел бы изменить, чтобы лучше использовать графический процессор.Большая часть графики проста и может быть легко встроена в граф сцены, но часть графики может оказаться очень сложной.В частности, в дополнение к обычным объектам типа сетки, я также имею дело с облаками точек, которые могут содержать миллиарды декартовых чисел, хранящихся в очень компактном виде, использующем довольно много пользовательских методов отбора для отображения в режиме реального времени (*Пример 1 001 * * * 1002).Я ищу механизм, который выполняет большую часть рендеринга сцены в буфер, а затем дает мне доступ к этому буферу, буферу az и параметрам камеры, так что я могу изменить их, прежде чем вывести их на дисплей.Мне интересно, возможно ли это с Direct3D, OpenGL или, возможно, использовать высокоуровневую инфраструктуру, такую ​​как OpenSceneGraph, и что будет лучшей отправной точкой?Учитывая, что программное обеспечение основано на Windows, я, вероятно, предпочел бы использовать Direct3D, поскольку это может привести к наименьшему количеству проблем с драйверами, которых я очень хочу избежать.OpenSceneGraph, кажется, предоставляет пользовательский отбор через октреи, которые близки, но не идентичны тому, что я использую.

Редактировать: Чтобы уточнить немного, в настоящее время у меня есть следующее:

  1. Список отображения / сцена в памяти, которая обычно будет содержать до нескольких миллионов треугольников, линий и фрагментов текста, , которые я отбрасываю в программном обеспечении и выводю на растровое изображение с использованием низкоговыполнение примитивов рисования

  2. Облако точек в памяти, которое может содержать миллиарды точек в сильно сжатом формате (~ 4,5 байта на 3-ю точку), которое я отбрасываю и выводлю в тот жерастровое изображение

  3. Информация о курсоре, которая добавляется в растровое изображение перед выводом

  4. Камера, z-буфер и буфер атрибутов для целей навигации и выбора

Медленный бит - это выделенная часть раздела 1, которую я хотел бы заменить на визуализацию какого-либо графического процессора.Решение, которое я планирую, состоит в том, чтобы создать сцену для графического процессора, отобразить ее в растровое изображение (с соответствующим z-буфером) на основе текущих параметров моей камеры, а затем добавить облако точек перед выводом.

В качестве альтернативы, я мог бы перейти к каркасу на основе сцены, который управлял камерами и навигацией для меня и предоставлял точки зрения в виде сфер или сплитов в зависимости от объема и уровня детализации во время цикла рендеринга.,В этом сценарии мне также понадобится добавить информацию о курсоре в представление.

В любом сценарии хост-приложением будет MFC C ++ на основе VS2017, что потребовало бы слишком много работы для изменения в целяхэто упражнение.

1 Ответ

0 голосов
/ 31 января 2019

Трудно сказать точно, основываясь на вашем описании сложной проблемы.

OSG, вероятно, может сделать то, что вы ищете.

В зависимости от ваших временных рамок, я бы хотел отказатьсяи OpenGL (OSG), и DirectX в пользу более нового 3D API Vulkan.Он является преемником D3D и OGL и разработан самими производителями графических процессоров для обеспечения оптимальной производительности, превосходящей оба предшественника.

Проект OSG в настоящее время разрабатывает сценограф Vulkan, известный как VSG, который уже демонстрирует превосходную производительность.производительность для OSG и будет иметь более общую способность отбраковки.

Я много работал с облаками точек и довольно опытен с ними, но мне не совсем ясно, что вы предлагаете делать.

Если вы действительно хотите провести словесную дискуссию по этому вопросу, меня довольно легко найти (моя компания AlphaPixel - AlphaPixel.com), и вы можете позвонить нам.Я сейчас нахожусь в европейском часовом поясе, из вашего вопроса непонятно, где вы находитесь, но вы звучите в США.

...