Я концептуализирую хороший подход к рендерингу множества несвязанных фрагментов геометрии с одним призывом рисовать в OpenGL, а стена, против которой я против, - лучший способ сделать это, когда каждая часть имеет другой перевод и, возможно, вращение, так как у вас нет роскоши для обновления вида модели единообразной между одиночными объектами. Я прочитал несколько других вопросов здесь и в других местах, и кажется, что направления, на которые указывают люди, весьма разнообразны. Было бы неплохо перечислить основные методы этого и попытаться изолировать наиболее распространенные или рекомендуемые. Вот идеи, которые я рассмотрел:
[edit: удалено упоминание о Instancing, поскольку оно действительно не применяется здесь]
-
Создание матричных преобразований в шейдере. Здесь я бы послал вектор трансляции или, возможно, угол поворота или кватернион как часть атрибутов. Преимущество заключается в том, что он будет работать на кросс-платформенной платформе, включая мобильный. Но кажется немного расточительным отправлять те же данные преобразования для каждой отдельной вершины в объекте, что и атрибут. Без instancing мне пришлось бы повторять эти идентичные векторы или скаляры для одного объекта много раз в VBO как часть массива чередования, так? Другой недостаток - я полагаюсь на шейдер, чтобы делать математику; Я не знаю, разумно это или нет.
-
Как и в случае с 1), но вместо того, чтобы полагаться на шейдер, чтобы выполнять вычисления матрицы, я вместо этого делаю это на стороне клиента, но все равно отправляю через итоговую матрицу представления модели как поток из 16 поплавков в VBO, Но, насколько я могу судить, без инстинктов мне пришлось бы повторить этот идентичный поток для каждой вершины в VBO, верно? Просто кажется расточительным. Компромисс с 2) выше состоит в том, что я отправляю больше данных в VBO на вершину (16 поплавков, а не 3-плавающий вектор для перевода и, возможно, 4-мерный кватернион), но требуя, чтобы шейдер выполнял меньше работы.
-
Пропустите все вышеуказанные ограничения и вместо этого выполните компромисс с отдельным призывом рисования для каждого объекта. Это то, что обычно "учит" в книгах, которые я читаю, без сомнения, ради простоты.
Существуют ли другие общие методы, чем эти?
Как академический вопрос, мне любопытно, возможно ли все вышеизложенное и "приемлемо", или если один из них явно побеждает над другими? Если бы я был исключительно для использования настольного ГЛ, то он стал основным способом достижения этого?