Я провел много исследований и теперь чувствую, что почти понимаю, о чем все это.
Первый важный урок, который я усвоил, заключается в том, что OpenGL 1.1 сильно отличается от OpenGL 2.0. В версии 2.0 принцип, по-видимому, заключается в том, что массивы данных передаются в графический процессор, а шейдеры используются для рендеринга деталей. Это отличается от v1.1, где больше делается в обычном коде приложения с pushmatrix / popmatrix и различными встроенными командами рисования.
Отличная серия постов в блоге, представляющих новейшие подходы к OpenGL, доступна здесь: Блог Джо: введение в современный OpenGL
Вершинный шейдер, который я описал выше, представляет собой преобразование набора вершин. члены 'attribute' являются per-vertex, а элементы'iform 'являются общими для всех вершин.
Чтобы этот код работал, вы должны передать массив векторных позиций (исходные позиции, я думаю), соответствующие массивы соединений и весов (другие переменные атрибута), и этот шейдер переместит входные вершины в соответствии с их прикрепленными суставы.
Равномерные переменные относятся в первую очередь к предоставленному текстурному изображению, а матрица проекции, как мне кажется, связана с преобразованием мировой системы координат в нечто, более соответствующее конкретным требованиям.
Возвращаясь к разработке для iPhone, лучше всего создать шаблонный проект OpenGL ES и обратить внимание на два разных класса рендеринга. Один для более линейного и устаревшего OpenGL 1.1, а другой для OpenGL 2.0. Лично я выкидываю код GL1.1, учитывая, что он применяется в основном к старым устройствам iPhone, и поскольку я нацеливаюсь на iPad, он больше не актуален. Я могу добиться лучшей производительности с шейдерами на GPU, используя GL2.0.