Я пишу приложение 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...
}
}
RayMeshGeometry3DHitTestResult
дает мне только точку попадания, а не параметры луча (начало и направление). Есть предложения, как их получить? (используя отражение, возможно, для имитации проверки попадания?) - person Itai Bar-Haim   schedule 25.07.2011