Матрица проекции указывает на поверхность сферы - PullRequest
2 голосов
/ 03 декабря 2010

Мне нужно спроецировать 3D-объект на поверхность сферы (хм ... как отбрасывание тени).

AFAIR это должно быть возможно с матрицей проекции.

Если тень "«Приемник» был плоскостью, тогда моя матрица проекции была бы проекцией 3D в 2D, но в этом случае мой приемник - это сферическая трехмерная поверхность.

Итак, с учетом сферы 1 (центральная точка, радиус), сферы 2 (другой центр, другой радиус) и точки зрения, как я могу вычислить матрицу, которая проецирует все точки из сферы 2 на сферу 1 (как отбрасывание тени).

Ответы [ 3 ]

4 голосов
/ 03 декабря 2010

Вы имеете в виду, что для данной вершины v требуется следующая проекция:

v'= centerpoint + (v - centerpoint) * (radius / |v - centerpoint|)

Это невозможно с матрицей проекции.Вы можете легко сделать это в шейдере.

2 голосов
/ 03 декабря 2010

Если сфера1 является сферой ((0,0,0), 1), то есть сфера радиуса 1 с центром в начале координат, то вы фактически запрашиваете способ преобразования любого местоположения (x, y, z) в 3D к соответствующему месту (x ', y', z ') на единичной сфере. Это эквивалентно перенормировке вектора: (x ', y', z ') = (x, y, z) / sqrt (x ^ 2 + y ^ 2 + z ^ 2).

Если сфера1 - это не единичная сфера, а, скажем, сфера ((a, b, c), R), вы можете сделать в основном то же самое: (x ', y', z ') = R * (x-a, y-b, z-c) / sqrt ((x-a) ^ 2 + (y-b) ^ 2 + (z-c) ^ 2) + (a, b, c). Это эквивалентно изменению координат, поэтому первая сфера - это единичная сфера, решающая задачу, а затем меняющая координаты обратно.

Как отмечали люди, эти функции являются нелинейными, поэтому проекцию нельзя назвать «матрицей». Но если вы по какой-то причине предпочитаете начинать с матрицы проекции, вы можете проецировать сначала из 3D в плоскость, а затем из плоскости в сферу. Я не уверен, что так будет лучше.

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

2 голосов
/ 03 декабря 2010

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

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