我正在编写一个以 3D 显示地形的 WPF 应用程序。
当我执行命中测试时,返回了错误的 3D 点(不是我点击的点)。
我尝试突出显示被击中的三角形(通过创建一个新网格,从RayMeshGeometry3DHitTestResult
对象中获取坐标)。我看到错误的三角形被击中(一个三角形被突出显示,但它不在光标下)。
我正在使用视场为 60 的透视相机,近平面和远平面分别为 3 和 35000。
知道为什么会发生以及我能做些什么来解决它吗?
如果您需要更多数据,请告诉我。
编辑:这是我用来执行命中测试的代码:
private void m_viewport3d_MouseDown(object sender, MouseButtonEventArgs e)
{
Point mousePos = e.GetPosition(m_viewport3d);
PointHitTestParameters hitParams = new PointHitTestParameters(mousePos);
HitTestResult result = VisualTreeHelper.HitTest(m_viewport3d, mousePos);
RayMeshGeometry3DHitTestResult rayMeshResult = result as RayMeshGeometry3DHitTestResult;
if (rayMeshResult != null)
{
MeshGeometry3D mesh = new MeshGeometry3D();
mesh.Positions.Add(rayMeshResult.MeshHit.Positions[rayMeshResult.VertexIndex1]);
mesh.Positions.Add(rayMeshResult.MeshHit.Positions[rayMeshResult.VertexIndex2]);
mesh.Positions.Add(rayMeshResult.MeshHit.Positions[rayMeshResult.VertexIndex3]);
mesh.TriangleIndices.Add(0);
mesh.TriangleIndices.Add(1);
mesh.TriangleIndices.Add(2);
GeometryModel3D marker = new GeometryModel3D(mesh, new DiffuseMaterial(Brushes.Blue));
//...add marker to the scene...
}
}