Хранение координат мирового пространства - PullRequest
1 голос
/ 10 ноября 2011

При проектировании объектов для размещения в мировом пространстве OpenGL, как хранятся координаты мирового пространства вместе с соответствующими им объектами / моделями?

Для простоты я использовал объектные файлы Wavefront и слышал, чтоиз Collada, но не смог найти ни одного стандартного метода сохранения мирового пространства, как можно было бы при разработке игрового уровня.

Я очень новичок в OpenGL.

Ответы [ 3 ]

1 голос
/ 10 ноября 2011

Обычно это не так.Объекты в основном проектируются в собственном пространстве.Их размещение в «мире» является результатом преобразования (перемещения, вращения), часто выражаемого в виде матрицы.

Если вы, например, посмотрите на спецификацию Collada, вы увидите, что сцена представляет собой иерархию (DAG) узлов и возможных перемещений, вращений, масштабов или наклонов.Я не думаю, что такие иерархии (или описания сцен) могут быть выражены в формате OBJ.

В целом это не имеет ничего общего с OpenGL.

1 голос
/ 10 ноября 2011

Положение, поворот и масштаб мира всегда можно определить как матрицу 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-модель, поскольку вы можете создавать экземпляры нескольких объектов одной модели (несколько врагов, которые выглядят одинаково).

Вот учебник , который показывает вам, каксоздать базовый движок.

1 голос
/ 10 ноября 2011

как хранятся координаты мирового пространства с соответствующими им объектами / моделями?

Как вам нравится.

OpenGL не занимается управлением данными.Это полностью зависит от вас, чтобы сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...