Прежде всего вам необходимо понять, что OpenGL на самом деле не понимает термин "модель" , все, что видит OpenGL, - это поток входящих вершин, и в зависимости от текущего режима он использует эти потоки вершины для рисования треугольников на экране.
Каждая итерация рисования кадра следует некоторой схеме, подобной этой:
- очистить все буферы
- для каждого элемента окна (основная сцена, HUD, мини-карта и т. Д.):
- установка ножниц и видового экрана
- условно чистая глубина и / или трафарет
- установить матрицу проекции
- установить матрицу вида модели для начального вида
- для каждой модели
- применить преобразование модели к стеку матриц
- привязка данных модели (текстуры, вершины и т. Д.)
- выдача команд рисования модели
- буферы подкачки
OpenGL не помнит, что там происходит. Была (есть) какая-то возможность, называемая Отображаемые списки , но они не способны хранить все виды команд - также они устарели и удалены из последних версий OpenGL. Команды непосредственного режима glBegin, glEnd, glVertex, glNormal и glTexCoord также были удалены.
Таким образом, идея заключается в том, чтобы загрузить некоторые данные (текстуры, массивы вершин и т. Д.) В буферные объекты OpenGL. Однако только текстуры непосредственно понимаются OpenGL как то, что они (изображения). Все остальные виды буферов требуют, чтобы вы указали OpenGL, как с ними обращаться. Это делается с помощью вызовов gl {Vertex, Color, TexCoord, Normal, Attrib} Pointer для установки параметров доступа к данным и glDraw {Arrays, Elements} для запуска OpenGL, извлекающих поток вершины для подачи в растеризатор.