Как получить все треугольники, затронутые светом или набором лучей?
Всем Привет!
Я работаю в приложении аэрофотосъемки, которое пытается определить, какая часть местности просматривается с аэрофотокамеры. Сначала я визуализировал DEM (цифровую модель рельефа) из существующего файла .tif, генерируя все треугольники сетки по позициям и значениям .tif. Я нашел решение, используя RayMeshGeometry3DHitTestResult, и посылая различные лучи от камеры. Проблема в том, что производительность очень низкая, потому что тест попадания нужно повторять тысячи раз, и он становится слишком медленным:
private static RayMeshGeometry3DHitTestResult rayHit; public static RayMeshGeometry3DHitTestResult SurfaceRayHit(Point3D p, Vector3D v) { RayHitTestParameters hitParams = new RayHitTestParameters(p,v); VisualTreeHelper.HitTest(App.AppDemModel, null, new HitTestResultCallback(MainDemHitPoint), hitParams); return rayHit; } public static HitTestResultBehavior MainDemHitPoint(HitTestResult result) { if (result.VisualHit == App.AppDemModel) { rayHit = (RayMeshGeometry3DHitTestResult)result; //rList.Add(hit); return HitTestResultBehavior.Stop; } return HitTestResultBehavior.Continue; }
Что я уже пробовал:
Я думаю, что это должно быть внутренне реализовано ViewPort3D (HelixViewport в моем случае), так как свет попадает только на определенные треугольники в Geometry3D, но я не мог найти способ получить список треугольников(вершин), затронутых светом.
Заранее спасибо, любая помощь будет действительно оценена по достоинству.