Есть ли 3D-объект смотреть на матрицу 3D-объектов? - PullRequest
0 голосов
/ 25 ноября 2018

То, что у меня сейчас есть, заставляет мой трехмерный объект становиться плоским.Но это смотрит на мою цель.

    Vector4 up;
    newMatrix.SetIdentity();

    up.set_x(0);
    up.set_y(1);
    up.set_z(0);

    Vector4 zaxis = player_->transform().GetTranslation() - spider_->transform().GetTranslation();
    zaxis.Normalise();
    Vector4 xaxis = CrossProduct(up, zaxis);
    xaxis.Normalise();
    Vector4 yaxis = CrossProduct(zaxis, xaxis);

    newMatrix.set_m(0, 0, xaxis.x()); newMatrix.set_m(0, 1, xaxis.y()); newMatrix.set_m(0, 2, xaxis.z());
    newMatrix.set_m(1, 0, yaxis.x()); newMatrix.set_m(1, 1, yaxis.y()); newMatrix.set_m(1, 2, yaxis.z());
    newMatrix.set_m(2, 0, zaxis.x()); newMatrix.set_m(2, 1, zaxis.y()); newMatrix.set_m(2, 2, zaxis.z());

Извините за метод ввода значений в матрицу, я работаю с тем, что дает мне мой фреймворк.

Vector4 Game::CrossProduct(Vector4 v1, Vector4 v2)
{
    Vector4 crossProduct;
    crossProduct.set_x((v1.y() * v2.z()) - (v2.y() * v2.z()));
    crossProduct.set_y((v1.z() * v2.x()) - (v1.z() * v2.x()));
    crossProduct.set_z((v1.x() * v2.y()) - (v1.x() * v2.y()));
    return crossProduct;

}

Что я здесь не так делаю?Обратите внимание, что я добавил четвертую строку раньше с 1 в углу, прежде чем на всякий случай, без изменений.

1 Ответ

0 голосов
/ 25 ноября 2018

у вас проблема, когда (0,1,0) близко к параллельному направлению, на которое вы хотите смотреть.Тогда перекрестное произведение не сможет привести к нулю в одном или двух базисных векторах, что может привести к появлению 2D.Но это произойдет, только если ваши объекты будут смещены только по оси y друг от друга.Чтобы избежать этого, вы можете протестировать продукт dot между направлениями up и view и, если abs результата больше, чем 0.7, используйте (1,0,0) вместо этого (как вверх, вправо или как угодно ...).

Кроме того, поскольку мы ничего не знаем о ваших обозначениях, мы не можем подтвердить ваши настройки, матрица верна (может быть, а может и нет, ее можно транспонировать и т. Д.), Для получения дополнительной информации посмотрите:

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

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