2011-02-04 3 views
0

Я хочу сориентировать свою матрицу так, чтобы вектор Up был направлен в том же направлении, что и другой вектор. Ориентация Вперед и Вправо векторов не имеет значения.Вращайте матрицу так, чтобы вектор вектора равнялся другому вектору

Например:

matrix4 m; // m.Up = 0, 1, 0 
vector3 v = V3(1,0,0); 

// Then I think I have to get the rotation from m.Up and v 
// And then rotate the matrix accordingly 

Но я не знаю, как TODO это, и я могу ошибаться.

+0

Используйте кватернионы для этого. Это правильный инструмент для этой точной работы. –

+0

Я думал, что может быть быстрее, так как мне не нужен угол, только ось? –

ответ

3

Это одна из проблем, которые вращения матриц, которые особенно полезны для

Во-первых, разделить вашу матрицу на три компонента вектора (вверх, вперед и вправо).

Настройте свой вектор так, чтобы вы его хотели. Затем отрегулируйте свой передний и правый векторы так, чтобы они находились под прямым углом, простой способ сделать это можно было бы с помощью перекрестных продуктов.

Например:

//Gets a perpendicular vector 
V3 V3::Perp() { 
    V3 perp = v.Cross(NewV3(-1, 0, 0)); 
    if(perp.Length() == 0) { 
     // If v is too close to -x try -y 
     perp = v.Cross(NewV3(0, -1, 0)); 
    } 
    return perp.Unit(); 
} 
//up = Whatever you need 
forward = up.Perp() 
right = cross(up, forward); 

После этого, подключите ваши векторы обратно в матрицу и вуаля: D.

1

Если я правильно понимаю, просто установите свою ось вверх в матрице на выбранный вами вектор. Как вы говорите, что прямой и правый векторы не имеют значения, установите их во что угодно, пока они ортонормированы вашей новой оси.

Смежные вопросы