Быстрое вращение и перевод без использования glRotate / glTranslate - PullRequest
2 голосов
/ 30 января 2011

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

  1. Если я использую glRotate и glTranslate в непосредственном режиме, он будет слишком медленным из-за всех переходов между клиентом / сервером.

  2. Если я использую glRotate и glTranslate в Списке отображения, это будет быстро, но я избегаю Список отображения, потому что он устарел.

  3. Если я использую VBO, мне нужно предварительно повернуть и предварительно перевести восьмиугольник на ЦП, прежде чем загружать его в память сервера.Это работает, но занимает много процессорного времени.

Поэтому мне интересно ... есть ли в любом случае возможность переводить / вращать вершины, хранящиеся в VBO, не прибегая к вычислениям на основе ЦП.Существует ли VBO-эквивалент для выполнения поворота / перевода значений, хранящихся в памяти сервера?Мне бы очень хотелось, чтобы графический процессор выполнял все расчеты и освобождал мой процессор от всех функций триггера.

Ответы [ 2 ]

3 голосов
/ 29 декабря 2012

Вы можете использовать GLSL для написания шейдера, который обрабатывает преобразование для вас.Однако вам нужно как-то сделать матрицу преобразования доступной для шейдера.

Если вы делаете это в 2D, возникает аналогичный вопрос (для квадроциклов, но теория та же самая) в стеке разработки игрexchange: Основы рисования в 2D с помощью шейдеров OpenGL 3 .

Обратите внимание, что второй ответ на этот вопрос, который дает более подробную информацию, имеет ссылку на OpenGL.org, у которого сломан якорь,Я считаю, что это должно ссылаться на Instanced массивы .

Пример экземпляра, который я нашел после быстрого поиска в Google: Экземпляр шейдера .В этом уроке вы, вероятно, захотите взглянуть на вершинный шейдер для примера матрицы преобразования, примененной с использованием буфера текстуры для хранения матрицы.Пример кода - Delphi, но он должен быть читабельным.Сайт на немецком языке, но вы всегда можете использовать Google переводчик.

3 голосов
/ 30 января 2011

Я бы использовал VBO и обычные glRotate и glTranslate (или предоставил матрицу для вершинного шейдера, используя glUniformMatrix ).Я не думаю, что это замедлит рендеринг!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...