Кстати, после того как тебе ответил, я пошел искать алтернативный вариант. И твой пример
С помощью PlaneFromPoints() находишь плоскость, содержащую треугольник.
С помощью PlaneIntersectLine() находишь точку пересечения вертикального луча из координат шарика с этой плоскостью.
натолкнул меня на встроеные функции
PlaneFromPoints() - найти плоскоть треугольника (не знаю что значит) , но в блитце структура такая:
3д модель - это Mesh (сетка)
Состоит из Surface - поверхность, их может быть несколько
Surface содержит Vertex - вертексы
Из Vertex создаются Triangles - треугольники, состовляющие всю сетку Mesh
А вот для PlaneIntersectLine() есть функция
- Код: Выделить всё
LinePick(x,y,z,dx,dy,dz)
Она создает тоже вроде луча из x,y,z до dx,dy,dz и если в луч сталкивается с каким либо объектом возвращает множество параметров:
Функции вызываются после LinePick для получения результатов:Получение координат столкновения:
PickedX#()
PickedY#()
PickedZ#()
Получения координат нормали:
PickedNX#()
PickedNY#()
PickedNZ#()
Возвращает время потраченое на выполнение:
PickedTime#()
Возвращает Handle объекта:
PickedEntity()
Возвращает поверхность объекта:
PickedSurface()
Возвращает треугольник объекта:
PickedTriangle()
Благодаря этой функции LinePick я попробовал реализовать свою задумку. Прилагаю исходник. Вроде бы получилось, но есть баги - иногда высота перестает просчитываться. Пока выясняю где собака зарыта.
Спс за помощь. Жаль конечно с математикой чистой была бы готовая функция, а не костыль корявый

У вас нет доступа для просмотра вложений в этом сообщении.