Я прочитал этот урок, https://learnopengl.com/Getting-started/Transformations В конце, над последней картинкой, написано:
glm::mat4 trans;
trans = glm::translate(trans, glm::vec3(0.5f, -0.5f, 0.0f));
trans = glm::rotate(trans, (float)glfwGetTime(), glm::vec3(0.0f, 0.0f, 1.0f));
Я не знаю, каковы окончательные значения транс, это translate * rotate или rotate * translate ?
Здесь мы сначала поворачиваем контейнер вокруг начала координат (0,0,0) и после его поворота мыпереведите его повернутую версию в правый нижний угол экрана. Помните, что фактический порядок преобразования следует читать в обратном порядке: даже если в коде мы сначала переводим, а затем поворачиваем, фактические преобразования сначала применяют вращение, а затем перевод.
итоговый transform = translate * rotate ?но почему он не пишет код следующим образом:
glm::mat4 trans;
trans = glm::rotate(trans, (float)glfwGetTime(), glm::vec3(0.0f, 0.0f, 1.0f));
trans = glm::translate(trans, glm::vec3(0.5f, -0.5f, 0.0f)); // revise order
код в вершинном шейдере выглядит следующим образом: gl_Position = transform * vec4(aPos, 1.0);
это выглядит как transform = translate * rotate , потому что нам нужно сначала применить rotateа затем перевести.
update: Итак, я знаю, что умножение нужно читать справа налево, потому что это основная матрица столбца, но я не понимаю, когда конструируют транс-матрицу, почему бы не использовать пересмотренную версию?