TL; DR: двигатель - это просто набор компонентов многократного использования.
Стена текста: в играх хранится представление о мире, например, у вас есть объект, подобный дому, с сеткой, которая определяет, как выглядит его геометрия, и положение.
Теперь у вас, вероятно, есть несколько сущностей. Допустим, у нас есть управляемый игроком персонаж и несколько ящиков. Когда игрок хочет двигаться, вы перемещаете персонажа и проверяете, сталкивается ли он с какими-либо ящиками. Вот где физика вступает в игру. В зависимости от того, как смоделирована физика, персонаж может просто пройти через ящики, остановиться перед ящиками или толкнуть ящики.
Имейте в виду, это только меняет внутреннее состояние игрового мира.
Затем, после расчета движения и физики, вы должны визуализировать кадр, например, нарисовать текущее состояние мира на экране.
OpenGL и DirectX являются графическими API, они используются только для визуализации объектов (например, персонажа) на экране.
Итак, вы в основном говорите OpenGL / DirectX: «Я хочу нарисовать символ в позиции 1 и прямоугольник в позиции 2 и ...».
Конечно, это грубое упрощение.
В любом случае, поскольку мы не хотим все время проходить эту процедуру шаг за шагом, мы помещаем эти вещи в функции и классы. Таким образом, у нас может быть класс физики, который содержит все функции, необходимые для моделирования физики, или графический класс, который взаимодействует с графическим интерфейсом API и рисует наши объекты. Эт вуаля, у нас есть двигатель.