2015-12-19 3 views
1

Я делаю игру, и мне нужен снаряд, в каком направлении он идет. Я знаю, в каком направлении он движется, и мне нужно сделать матрицу преобразования, которая позволила бы выровнять направление модели снаряда (1, 0, 0) или положительную ось Х любому произвольному вектору. Как я могу это сделать в glm?GLM Make Rotation Matrix от vec3

ответ

2

Эй, я понял ответ из, который был близок к @Mr_Pouet, но здесь это:

const glm::vec3 a = ...; 
const glm::vec3 b = ...; // in my case (1, 0, 0) 
glm::vec3 v = glm::cross(b, a); 
float angle = acos(glm::dot(b, a)/(glm::length(b) * glm::length(a))); 
glm::mat4 rotmat = glm::rotate(angle, v); 

Вы можете заменить или б все, что вы хотите, где вектор вы хотите для перевода, и b, где вы находитесь. Мы можем оптимизировать это, если Ь (1, 0, 0) или оси х, как и в моем случае:

glm::vec3 v = glm::vec3(0, -a.z, a.y); 
float angle = acos(a.x/glm::length(a)); 
glm::mat4 rotmat = glm::rotate(angle, v); 

Я надеюсь, что это поможет кому-то!

1

Вы используете для правильного направления?

Вы могли бы сделать что-то вроде этого:

glm::mat4 transform = glm::eulerAngleYXZ(euler.y, euler.x, euler.z); 

Или с помощью кватернионов:

glm::quat rot = glm::angleAxis(glm::radians(angle_in_degrees), glm::vec3(x, y, z)); 
glm::mat4 rotMatrix = glm::mat4_cast(rot); 

Если вы не искали что-то же просто, как glm::lookAt?

detail::tmat4x4<T> glm::gtc::matrix_transform::lookAt 
( 
    detail::tvec3<T> const & eye,  // from 
    detail::tvec3<T> const & center, // to 
    detail::tvec3<T> const & up  // up 
) 
Смежные вопросы