Как заново определить матричную переменную glm или удалить ее преобразование? - PullRequest
0 голосов
/ 30 декабря 2018

Мне нужно сделать несколько моделей одну за другой, не используя цикл.Сначала я определяю с помощью glm::mat4 model(1), делаю несколько переводов и вращений, а затем хочу удалить все его преобразования.Но сделать его равным NULL не работает.Есть ли какая-нибудь функция в glm, которую я могу вызвать?

Также дополнительный вопрос может кто-нибудь объяснить, почему мне нужно добавить «(1)» при объявлении переменных матрицы glm.Это не работает без этого.Нужно ли что-то добавлять также при объявлении матричных массивов glm, glm::mat4 models[]?Потому что массивы, похоже, не хранят переменные.

1 Ответ

0 голосов
/ 30 декабря 2018

Конструктор по умолчанию glm::mat4 не инициализирует матрицу, он оставляет поля матрицы неинициализированными.

Документация glm API относится к Спецификация OpenGL Shading Language 4.20 .

5.4.2 Векторные и матричные конструкторы

Если в конструкторе векторов есть один скалярный параметр, он используется для инициализации всех компонентов построенноговектор к значению этого скаляра. Если в конструкторе матрицы имеется один скалярный параметр, он используется для инициализации всех компонентов по диагонали матрицы, а остальные компоненты инициализируются равными 0,0.

Это означает, чточтобы инициализировать матрицу с помощью Identity matrix , необходимо использовать конструктор с одним скаляром:

glm::mat4 model(1.0f);

и, конечно, Identity matrix может бытьприсваивается существующей матрице:

model = glm::mat4(1.0f); 

Динамический массив, например, 100 идентичных матриц, может быть сгенерирован с помощью std::vector с легкостью:

std::vector<glm::mat4> models(100, glm::mat4(1.0f));
...