地形を 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...
}
}