Повернуть матрицу, чтобы вектор Up был равен другому вектору - PullRequest
0 голосов
/ 04 февраля 2011

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

Например:

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

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

Ответы [ 2 ]

3 голосов
/ 04 февраля 2011

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

Сначала разбейте вашу матрицу на три вектора компонентов (вверх, вперед и вправо).

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

Например:

//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 голос
/ 04 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...