Если вы уже использовали шейдеры, изменений не много. Вы сталкиваетесь с чем-то, чего не хватает, добавляете умножение матриц в коде рендеринга и две строки в свой шейдер (или, скорее, на половину строки), и жизнь продолжается.
Если, как и я, вы были достаточно глупы, чтобы попытаться использовать OpenGL для чего-то продуктивного (то есть для рендеринга научных данных с высокой частотой кадров, а не для игр), вам будет немного больно. Вам нужно будет написать (под этим я имею в виду вырезать и вставить пример) пару десятков строк кода шейдера, чтобы заменить конвейер с фиксированными функциями, и ближе сто строк кода установки для компиляции, связывания и активации этих шейдеры (наряду с выводом отладки вы не получите правильного результата с первой попытки).
В любом случае все равно ничего не будет работать. Тогда вы узнаете, что вам нужно связать VAO. На самом деле вам ничего не нужно делать с этим (если вы не хотите использовать несколько VAO для управления состоянием), вам просто нужен один, потому что ни один из других атрибутов / VBO не работает без него.
Когда вы закончите, вы можете подумать об интеграции вычислений GPGPU с использованием шейдеров или OpenCL и передать данные для рендеринга, все в графической памяти.