Я пытаюсь узнать, как сделать некоторые преобразования в 3d-точках в OpenGL. Использование this cheat sheet Я считаю, что у меня есть правильная матрица для умножения на мой вектор, который я хочу повернуть. Однако, когда я умножаю и печатаю новую координацию, я считаю, что она неверна. (Вращение 1,0,0 90deg cc должно привести к 0,1,0 правильно?) Почему это не работает?Почему мой вектор не вращается правильно OpenGL/GLM?
Мой код:
glm::vec4 vec(1.0f, 0.0f, 0.0f, 1.0f);
glm::mat4 trans = {
1.0f, 0.0f, 0.0f, 0.0f,
0.0f, cos(glm::radians(90.0f)), -sin(glm::radians(90.0f)), 0.0f,
0.0f, sin(glm::radians(90.0f)), cos(glm::radians(90.0f)), 0,
0.0f, 0.0f, 0.0f, 1.0f
};
vec = trans * vec; //I should get 0.0, 1.0, 0.0 right?
std::cout << vec.x << ", " << vec.y << ", " << vec.z << std::endl;
Вышеуказанные отпечатки 1.0, 0.0, 0.0
, указывающие, что не было никаких изменений вообще?
Я также попытался использовать функцию rotate
в GLM, чтобы сгенерировать свою матрицу, а не вручную указывать, но я все еще не понял, что, по моему мнению, должно быть правильным (у меня другой неправильный ответ).
glm::mat4 trans = glm::rotate(trans, 90.0f, glm::vec3(0.0, 0.0, 1.0)); //EDIT: my bad, should've been z axis not x, still not working
Вышеприведенные печатает: -2.14..e+08, -2.14..e+08, -2.14..e+08
(PS: Я просто взял геометрии в предыдущем учебном году, мои извинения, если математика неправильно У меня есть общее представление матриц и умножения матриц, которые я выбрал. сегодня, чтобы изучить преобразования OpenGL, но другие, что я вроде как noob)
Если вход (1,0,0,1) и выход должен быть (0,1,0,1), вы должны вращаться вокруг оси Z. –
@HannesHauptmann ok, я попытался сделать это изменение, но он все равно не возвращает правильный ответ 'glm :: mat4 trans = glm :: rotate (trans, 90.0f, glm :: vec3 (0.0, 0.0, 1.0)) ; ' –
С левой стороны вы видите, как OpenGL обрабатывает его. Я на 100% это вращение вокруг оси Z :) –