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

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

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