Как можно сохранить расположение моделей в 3D-сцене? - PullRequest
0 голосов
/ 17 апреля 2011

Мне интересно, как лучше всего сохранить положение объектов в 3D-сцене.В моем случае сцены на самом деле являются уровнями игры.

Каждая сцена имеет:

  • Это собственная матрица проекции.
  • Список моделей для визуализации

Каждая модель имеет:

  • Список вершин
  • GLSL-программа для визуализации самой себя
  • Текстура
  • Матрица "модель"

Я использую GLES 2. Таким образом, нет glPushMatrix, glPopMatrix, glTranslate и т. Д. Они недоступны.Вместо этого у меня есть свои собственные функции, которые работают с моими собственными объектами Matrix.

1) Настройте матрицу проекции (используя ортогональную матрицу)

_math_matrix_ortho(&this->ProjectionMatrix, 0.0, 1.0, 0.0, (float)height / (float)width, -1.0f, 1.0f);

2) Загрузите каждую модель

3) Масштабируйте каждую модель, чтобы сделать их правильной стороной пропорционально друг другу.Функция масштабирования регулирует матрицу модели.

model->modelMatrix.Scale(0.25, 0.25, 0.25);

4) Переместить каждую модель на место

model->modelMatrix.Translate(2.0, 0.0, 0.0);

7) Сделать каждую модель

Что мне кажется странным сразу: Это уместнопереводить матрицу модели для позиционирования моделей?

Должен ли я хранить идентификатор модели вместе с коэффициентами поворота, масштабирования и перевода в файле где-нибудь?

1 Ответ

1 голос
/ 17 апреля 2011

В общем, вам нужно как можно меньше матричных вычислений на кадр, поскольку они довольно дорогие. Поэтому в ваших классах сущностей сохраняйте их положение, вращение, масштабирование абсолютных значений в отдельных трехмерных векторах (вращение может быть даже в кватернионе) и только во время рендеринга соединяйте их с матрицей.

...