我需要尽可能有效地检测在Viewport3DX上给定的2d选择形状内,网格中的哪些三角形是可见的(忽略透明度)。网格由大量三角形组成,因此执行光线投射效率非常低。有没有使用SharpDX或其HelixToolkit包装器执行此操作的方法?
我想出的方法确定了网格中所有三角形与视口相机的平均距离,然后使用“画笔”方法将其绘制到2D位图上。如果要绘制的三角形的所有给定角已被涂上颜色(或其质心),则认为该三角形不可见。
这在大多数情况下都可以正常工作,但是如果缩小并且网格的分辨率特别高,则像素之间不可避免地会有重叠(因为它们被四舍五入为整数),因此某些三角形被认为是实际上它们不是隐形的。请参见下面的示例:
可以通过按比例绘制要绘制的位图的大小以及所有相应的三角形顶点位置来减轻此问题,但这并不完美,因为该问题可能仍会发生,并且会导致性能下降。