Где шейдеры соответствуют старым методам рендеринга в OpenGL? - PullRequest
1 голос
/ 05 октября 2011

Я написал рендерер уровней в OpenGL после многих онлайн-уроков. Я фактически рендеринг с массивами вершин и команда рисования диапазона. Теперь, когда я хочу, чтобы уровень освещался на пиксельное освещение, я понимаю, что шейдеры - это огромная часть, если не основная часть OpenGL на данный момент.

Итак, я здесь со своим «традиционным» методом рендеринга без шейдеров, и я хочу знать, как шейдеры вписываются в великую сцену вещей. Будет ли моя основная функция рендеринга реализована с помощью шейдеров, если я переработаю ее, чтобы использовать последние возможности OpenGL? Могу ли я оставить рендеринг в коде и просто использовать шейдеры для освещения?

Я хочу сделать это правильно, а не быстро, поэтому я собираюсь продолжить читать OpenBL Superbible и учиться на ходу.

Может ли кто-нибудь объяснить мне, как все вписывается, и действительно ли эти старые учебники онлайн, такие как Nehe и gametutorials, по-прежнему применимы.

1 Ответ

1 голос
/ 05 октября 2011

Использование фиксированной функции OpenGL грубо выполняет следующие шаги:

  • Настройка матрицы проекции
  • Настройка матрицы вида модели
  • Установка параметров освещения
  • Привязка текстур к текстурным блокам
  • Определение операций текстурной среды
  • Настройкаup geometry (Vertex Arrays / Vertex Buffer Objects)
  • Выполнить команды рисования

Это первые 5 шагов, которые отличаются при использовании шейдеров.Шейдеры заменяют конвейер с фиксированной функцией, который управляется настройками, выполненными там.Прежде всего, вы должны предоставить шейдеры, которые реализуют преобразование вершин и генерацию фрагментов.Эти шейдеры принимают свои параметры в виде так называемых Uniforms .

Вы по-прежнему работаете с матрицами, только на этот раз вы доставляете их в OpenGL через униформу вместо стека матриц (в OpengGL-2 и OpenGL-3 профиля совместимости, матричный стек все еще там, а матрицы помещены во встроенную форму).

Текстуры по-прежнему связаны с текстурными единицами.С помощью сэмплерной формы текстурные единицы передаются в генерацию фрагмента.Вся текстурная среда была заменена фрагментными шейдерами.И, честно говоря: настроить фрагментный шейдер гораздо проще, чем возиться с дюжиной вызовов glTexEnvi.

Освещение происходит через шейдеры, поэтому вы передаете параметры освещения в форме и выполняете вычисления в шейдерах.

Команды рисования остаются неизменными.

Будет ли моя основная функция рендеринга выполняться с помощью шейдеров

Если под этим вы подразумеваете, будет ли шейдер делатьРисунок призывает: Нет!На самом деле не так сложно поднять старый рендерер OpenGL-1.1, который не использует списки отображения, режим выбора и немедленный режим, в ядро ​​OpenGL-3.(Если включены списки отображения, режим выбора и немедленный режим ...)

...