Я закодировал себя вьюер OpenGL BSP для старого игрового формата. Это очень похоже на формат файла Quake 3. Поскольку я заинтересован в разработке графических движков, я хочу развиваться, глядя на использование современных технологий. Поэтому я обращаюсь к вам, экспертам по этому вопросу, чтобы определить, на чем сосредоточиться. Я хотел бы, чтобы это было как можно быстрее, и учитывая, что старые форматы файлов очень просты и имеют мало полигонов, я думаю, это должно быть выполнимо. Вот мои вопросы:
Освещение Имеет ли для меня смысл изучать освещение вершин или я должен просто реализовать освещение на пиксель? б. Я знаю, что OpenGL имеет 8 легких пределов. Должен ли я реально использовать только один из них для рассеянного света, а остальной компьютер - через шейдеры? Если нет, что мне делать?
Сортировка / Отбор Какой самый быстрый наиболее распространенный используемый алгоритм сортировки поверхностей для рендеринга. Сложность на самом деле не проблема. Я хочу узнать, что в настоящее время используется, и способы действительно отображать только то, что я вижу. Я видел несколько алгоритмов, описанных как алгоритм художника, и мне интересно, что имеет смысл для геометрии, основанной на BSP. б. Если у меня есть текстуры с альфа-масками, мне сказали, что сортировка связана с этим процессом. Как мне позволить им правильно рендерить в 3d пространстве?
Графический конвейер а. Должен ли я отправлять свои данные геометрии через VBO? Этот стандарт используется сегодня? б. Если у меня есть несколько «регионов», возможно, 200-300, я должен найти лучший способ отправить их в графический процессор без отправки 200-300 кусков. Должен ли я объединить их в одну и сохранить ссылку, связанную с каждым.
Любые другие советы для рендеринга на основе BSP и тому подобное?
Кроме того, если я сказал что-то, что было неправильно, пожалуйста, поправьте меня. Я тот человек, который скорее будет исправлен и слегка смущен, чем невежественен и неосознан.
Спасибо за ваше время. Я действительно ценю это.
Ответы:
Если вы - как вы говорите - заинтересованы в современных технологиях:
1) Освещение: Пиксельное освещение, безусловно. Если вы хотите взглянуть на рендеринг текущего поколения, вы будете писать вершинные и пиксельные шейдеры. Просто как тот. Они предлагают практически неограниченную гибкость и не намного сложнее в использовании, чем конвейер с фиксированными функциями, если вы начнете изучать их должным образом. Ограничение освещенности в 8 OpenGL применимо только для старомодных установок конвейера с фиксированными функциями. Не идите по этому пути, изучите OpenGL Core и забудьте обо всем устаревшем материале glBegin / glEnd.
2) Сортировка / Отбор: Для начала: сортируйте только, если вам нужно для прозрачности. Только отбраковывать объекты, которые находятся за пределами области видимости.
3) Если вы используете OpenGL, используйте VBO и VAO.
-
Без ответа: если вы создаете средство просмотра для старомодного формата BSP (я подозреваю, что-то из движка Valve / ID?), Вы сможете избежать рисования всего уровня без какой-либо оптимизации (culling / bsp) ) вообще и до сих пор получаю полную частоту кадров на современном железе;)
Совет по OpenGL: получите OpenGL Superbible 5-е издание. Это научит вас, как создавать современные OpenGL, и не затуманивает вас тем, что позже вы обнаружите, что оно устарело.
источник
1.a Освещение для каждой вершины легче, чем для освещения на пикселях (освещение на каждой вершине встроено в OpenGL, для освещения на пиксель требуется собственный шейдер).
1.b Если у вас есть восемь источников света, используйте их! Вы должны будете рассчитать, какие огни видны, хотя.
3.a Используйте VBOS. Никогда не используйте glBegin / glEnd (если вы не используете списки отображения, но в вашей ситуации VBO являются лучшим решением)
3.b Вы не должны беспокоиться о производительности, пока программа находится в разработке. Особенно с сегодняшним оборудованием. Итак, отправьте свои 200-300 кусков.
Я не знаю карт BSP достаточно хорошо, чтобы помочь вам с вашими другими вопросами.
источник