Определение, находится ли вершина слева или справа от камеры - PullRequest
0 голосов
/ 31 марта 2012

Если у вас есть заданная вершина, как вы можете определить, находится ли эта вершина слева или справа (или, возможно, прямо на одной линии) с камерой? Вся информация об этом показывает, как это сделать в 2D, но мне нужно 3D.

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

Я думаю, что мне нужно найти преобразование, которое делает вектор роста = (0, 1, 0) и вектор взгляда = (0, 0, 1), а затем применить это преобразование к вершине. Тогда вы можете просто сказать, что если координата x вершины меньше, чем у камеры, то она слева от нее, иначе она справа.

1 Ответ

0 голосов
/ 09 апреля 2012

Это так же просто, как умножение вектора на матрицу проекции вида.Вот к чему это сводится, так что вам не нужно выполнять полное умножение матриц (вам нужно проверить только один раздел полученной матрицы, чтобы увидеть, на какой стороне экрана находится вершина)

    private bool left(Vector3 v)
    {
        if (viewProjection.M11 * v.X + viewProjection.M21 * v.Y + viewProjection.M31 * v.Z + viewProjection.M41 < 0)
            return true;
        return false;
    }

viewProjection - это, очевидно, просто матрица вида * матрица проекции

...