Я создал что-то вроде упрощенного рендерера самостоятельно, используя OpenGL ES 2.0. По сути, это просто класс для рендеринга квадов по заданной текстуре спрайта. Чтобы уточнить, это всего лишь один объект, который принимает объекты, представляющие четырехугольники. Каждый четырехъядерный объект поддерживает матрицу преобразования мира и объекта и предоставляет методы для их преобразования в течение заданного количества кадров, а также определяет смещения текстуры в спрайт. Этот четырехъядерный класс также поддерживает список операций преобразования для выполнения над его матрицами. Затем класс рендерера считывает все эти свойства из четырехугольника и настраивает VBO для отрисовки всех четырехугольников в списке рендеринга.
Например:
Quad q1 = new Quad();
Quad q2 = new Quad();
q1->translate(vector3( .1, .3, 0), 30); // Move the quad to the right and up for 30 frames.
q2->translate(vector3(-.1, -.3, 0), 30); // Move the quad down and to the left for 30 frames.
Renderer renderer;
renderer.addQuads({q1, q2});
It's more complex than this, but you get the simple idea.
С точки зрения реализации, в каждом кадре он преобразует базовые вершины каждого объекта в соответствии с инструкциями, загружает их все в VBO, включая информацию об альфа-значении, и передает шейдерной программе отрисовку всех четырехугольников одновременно.
Очевидно, это не то, что я бы назвал движком рендеринга, но он выполняет аналогичную задачу, только для рендеринга 2D-квадратов вместо 3D-геометрии. Мне просто любопытно, нахожусь ли я на правильном пути для разработки импровизированного механизма рендеринга. Я согласен с тем, что в большинстве случаев здорово использовать установленный движок рендеринга, чтобы начать понимать их, но, с моей точки зрения, мне нравится иметь некоторое представление о том, как вещи реализованы, а не изучать что-то предварительно созданное, а затем узнать, как это работает.