Вопрос

Я использую

worldview_inverse * (projection_inverse * vector)

преобразовать координаты экранного пространства в координаты мирового пространства.Я предполагал , что

(x,y,1,1)

преобразовался бы в точку на дальней плоскости, в то время как

(x,y,-1,1)

преобразуется в точку на ближней плоскости, и, соединяя линию, я могу запрашивать все объекты в усеченном виде, которые пересекают линию.После преобразования я делю полученные точки на их соответствующий компонент .w .Это работает для дальней плоскости, но точка на ближней плоскости каким-то образом преобразуется в начало мирового пространства.

Я думаю, это связано с w компонентами 1, которые я загружаю в обратную проекцию, потому что обычно это 1 до проекции, а не после, и я делаю обратную проекцию.Что я делаю не так?

Это было полезно?

Решение

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

near_point = view_position
           + (far_point - view_position) * (near_distance / far_distance)

Что касается вашей реальной проблемы.Во-первых, не забудьте разделить на W!Кроме того, в зависимости от вашей матрицы проекции, пробовали ли вы (x, y, 0, 1) в отличие от z = -1.

near_point = worldview_inverse * (projection_inverse * vector)
near_point /= near_point.W
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top