Мне нужно определить, какие треугольники в сетке, внутри заданной двухмерной формы выделения на Viewport3DX видны (игнорируя прозрачность) настолько эффективно, насколько это возможно. Сетка состоит из большого количества треугольников, поэтому крайне неэффективно выполнять лучевое вещание. Есть ли способ сделать это с помощью SharpDX или его оболочки HelixToolkit?
Метод, который я придумал, определяет среднее расстояние всех треугольников в сетке от камеры видового экрана, а затем использует метод «кисть», чтобы нарисовать их на 2D растровом изображении. Если все заданные углы для нарисованного треугольника уже закрашены (или его центроид), то треугольник считается невидимым.
В большинстве случаев это работает достаточно хорошо, но если вы уменьшаете масштаб, и сетка имеет особенно высокое разрешение, то неизбежно возникает перекрытие между пикселями (поскольку они округлены до целых), так что некоторые треугольники считаются невидимы, когда на самом деле их нет. Смотрите пример ниже:
Эта проблема может быть уменьшена путем увеличения размера растрового изображения и всех соответствующих положений вершин треугольника, но это несовершенно, так как проблема все еще может возникать, и это влечет за собой большее снижение производительности.