Я пишу приложение WPF, которое отображает ландшафт в 3D.
Когда я выполняю тестирование удара, возвращается неправильная 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...
}
}