Почему glm не переводит вершину - PullRequest
0 голосов
/ 23 июня 2019

Я пытаюсь перевести вершину с матричным преобразованием, используя glm.

Но похоже, что я делаю что-то не так.Я пытался изменить сторону v m и m 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;
}

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Может быть, ваши входные данные неверны? Можете ли вы показать входные данные

0 голосов
/ 23 июня 2019

Я проверил это с 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.

...