0

我需要尽可能有效地检测在 Viewport3DX 上给定的 2d 选择形状内网格中的哪些三角形是可见的(忽略透明度)。网格由大量三角形组成,因此执行光线投射的效率非常低。有没有办法用 SharpDX 或其 HelixToolkit 包装器做到这一点?

我提出的方法确定了网格中所有三角形与视口相机的平均距离,然后使用“画笔”方法将它们绘制到 2D 位图上。如果要绘制的三角形的所有给定角都已被着色(或其质心),则该三角形被视为不可见。

这在大多数情况下工作得相当好,但如果你缩小并且网格特别高分辨率,那么像素之间不可避免地会有重叠(因为它们被四舍五入为整数),这样一些三角形在进入时被认为是不可见的事实上他们不是。请参见下面的示例:

在此处输入图像描述

这个问题可以通过放大要绘制的位图的大小以及所有相应的三角形顶点位置来减轻,但这并不完美,因为问题可能仍然存在,并且会导致更多的性能损失。

4

1 回答 1

1

一般的方法是使用视图矩阵、投影矩阵和视口矩阵将所有顶点转换到屏幕空间上。然后,您可以轻松搜索哪些顶点在您的 2D 区域内。然后获取与内部顶点关联的所有三角形。

当然,一旦相机改变,所有顶点都必须重新计算。

于 2018-09-14T20:39:45.087 回答