Я пытаюсь перевести вершину с матричным преобразованием, используя glm.
Но похоже, что я делаю что-то не так.
Я пытался изменить сторону vм и мv, но результат тот же. Res имеет те же значения, что и to
после умножения;
void transform(V3 &to, PTransformation t)
{
float v1 = to.x();
float v2 = to.y();
float v3 = to.z();
glm::vec4 v = glm::vec4(v1, v2, v3, 1.0f);
glm::vec3 valuesToTranslate(t.translateX, t.translateY, t.translateZ);
glm::mat4 m = glm::translate(valuesToTranslate);
glm::vec4 res = v * m;
to.e[0] = res.x;
to.e[1] = res.y;
to.e[2] = res.z;
}
Обычно с OpenGL порядок умножения m * v, а не v * m
@Rabbid76 Rabbid76 Я хочу добавить умножение масштаба и умножение вращения. Это был просто пример
Я проверил это с GLM 0.9.9 и GCC 7.4.0, и это работает после переключения порядка умножения v
и m
.
glm::vec4 v = glm::vec4(0.0, 4.0, 0.0, 1.0f);
glm::vec3 valuesToTranslate(8.0, 0.0, 0.0);
glm::mat4 m = glm::translate(valuesToTranslate);
glm::vec4 res = m * v;
// expected output: vec(8.0, 4.0, 0.0, 1.0)
std::cout << glm::to_string(res) << std::endl;
Если вы все еще не получаете ожидаемых результатов в своем собственном коде, я бы посоветовал проверить входные значения и, если это не удается, проверить отсутствие известных проблем с вашей версией GLM.
Странно, что вы не приняли это, а затем приняли менее подробный ответ, опубликованный несколько дней спустя.
Может быть, ваши входные данные недействительны? Можете ли вы показать исходные данные
Почему бы вам просто не добавить три координаты
t
к координатамto
?