有没有一种有效的方法来确定MeshGeometryModel3D的任何顶点是否在视口中可见?

问题描述 投票:0回答:1

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

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

在大多数情况下,这种方法效果相当不错,但是如果你缩小并且网格特别高分辨率,那么像素之间不可避免地存在重叠(因为它们被舍入到整数),这样一些三角形被认为是不可见的。事实上他们不是。请参阅以下示例:

enter image description here

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

c# wpf sharpdx helix-3d-toolkit
1个回答
1
投票

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

当然,一旦更换相机,就必须重新计算所有顶点。

© www.soinside.com 2019 - 2024. All rights reserved.