Суть вопроса такая, есть в библиотеках ДГУИ полезная функция:
method Win2World takes real X, real Y, real Range returns VECTOR3
Переводит относительные оконые координаты (от -1 до +1), в мировые, результирующая точка будет расположена на растоянии от камеры равном Range
В ренж нужно передать растояние от камеры до проекции этой точки на террейн, и вопрос заключается в том каким способом лучше найти это пересечение, пока есть вараинт перебора циклом с мелким шагом, но мне кажется это не лучшее решение, ведь при огромных расстояних это вызовет высокую нагрузку

Принятый ответ

а разве мы не задаём его триггерно?
посмотри как это сделано в дгуи
там же пример есть
ну а вообще
GetCameraTargetPositionX/Y/Z()-GetCameraEyePositionX/Y/Z()
это координаты вектора
а потом тупо высчитываем длинну вектора (гуглим вектора или теорему Пифагора)
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
21
8 лет назад
Отредактирован Raised
0
Если я хорошо помню, то в этом случае нужно найти расстояние от точки-приказа юниту двигаться до проекции этой точки на плоскость камеры. Опишу по этапам:
  • вектор, который представляет собой ось, проходящая через точки GetCameraEyePositionX,Y,Z и GetCameraЕфкпуеPositionX,Y,Z - это нормаль к плоскости камеры (у меня есть ряд оснований это утверждать)
  • с помощью этой нормали формируем уравнение плоскости в точке CameraEye
  • любой приказ (предположительно) в любую точку карты проецируется на ланд под углом атаки камеры
  • находим проекцию вектора, выходящего из точки приказа на плоскость камеры (этот вектор паралелен вектору камеры)
  • считаем расстояние от этой проекции до точки приказа(это и есть расстояние от этой точки на плоскости камеры (экране) до точки, в которую был отдан приказ). Если я не ошибаюсь - это должно работать.
0
28
8 лет назад
0
а разве мы не задаём его триггерно?
посмотри как это сделано в дгуи
там же пример есть
ну а вообще
GetCameraTargetPositionX/Y/Z()-GetCameraEyePositionX/Y/Z()
это координаты вектора
а потом тупо высчитываем длинну вектора (гуглим вектора или теорему Пифагора)
Принятый ответ
0
21
8 лет назад
0
Ну это даст расстояние от глаза камеры до цели камеры. Что дальше то? Что толку от длины?
0
24
8 лет назад
0
Ребята, забудьте о камере вообще, это не суть.
Есть произвольная точка пространства С , через нее проводится вектор, в месте где этот вектор пересекается с ландшафтом будет Х - как ее найти?
Загруженные файлы
0
28
8 лет назад
0
darkowlom, а зачем тебе точка пересечения с ландшафтом
объясни что хочешь сделать а я подскажу как лучше это сделать
0
24
8 лет назад
0
nvc123, в широком профиле интересует, без одной конкретной спецификации(она конечно есть, но интересует широкопрофильная реализация)
0
28
8 лет назад
0
darkowlom, в широком профиле только метод последовательного приближения
тут нужно рассматривать каждый конкретный случай и адаптироваться под него
0
24
8 лет назад
Отредактирован darkowlom
0
в широком профиле только метод последовательного приближения
Вот это мне и надо было узнать, теперь вопрос об оптимизации перебора, скорее всего буду использовать разбиение вектора на участки и проверку в сторону уменьшения, если на участке есть пересечение. Это позволит сразу отсеять половину карты и оставшийся участок делить на две части пока не получится минимальный отрезок на котором есть пересечение и его перебирать более детально. Тем более это поможет избежать лишних переборов если пересечения не существует вообще
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.