Положение, поворот и масштаб мира всегда можно определить как матрицу 4x4, но она теряет некоторую информацию, если вы просто сохраняете ее в одной матрице.Таким образом, три матрицы хранятся отдельно, так:
W = Translation * Rotation * Scale
with
[ 1 0 0 x ]
[ 0 1 0 y ]
[ 0 0 1 z ]
T = [ 0 0 0 1 ]
[ r r r 0 ]
[ r r r 0 ]
[ r r r 0 ]
R = [ 0 0 0 1 ]
[ sx 0 0 0 ]
[ 0 sy 0 0 ]
[ 0 0 sz 0 ]
S = [ 0 0 0 1 ]
Вращение довольно сложно хранить только в одной матрице.Таким образом, большую часть времени мы используем Quaternion для хранения вращения, потому что легче понять, что он делает, и это соответствует лучшим вычислениям.Я могу многое рассказать о карданных замках (фильм) , но вам, вероятно, понадобится справочное руководство для матриц и хорошая математическая библиотека openGL , которая содержитэти типы данных.
Поскольку OpenGL не является движком, имеющим некоторый базовый GameObject, который вы можете использовать, вам придется создать этот класс самостоятельно (при условии, что здесь ООП).Храните мировые данные в этих объектах и рисуйте их в соответствующем порядке.Вы не должны сохранять мировые данные в 3D-модель, поскольку вы можете создавать экземпляры нескольких объектов одной модели (несколько врагов, которые выглядят одинаково).
Вот учебник , который показывает вам, каксоздать базовый движок.