2009-12-13 19 views
2

到网格我有一个大致建立这样一个非常简单的3D场景:获取三维点相对在WPF

<Viewport3D> 
    <ModelVisual3D> 
    <ModelVisual3D.Content> 
     <Model3DGroup x:Name="Group1"> 
      <GeometryModel3D x:Name="m1">...</GeometryModel3D> 
     </Model3DGroup> 
     <Model3DGroup x:Name="Group2"> 
      <GeometryModel3D x:Name="m2">...</GeometryModel3D> 
     </Model3DGroup> 
     <Model3DGroup x:Name="Group3"> 
      <GeometryModel3D x:Name="m3">...</GeometryModel3D> 
     </Model3DGroup> 
    </ModelVisual3D.Content> 
    </ModelVisual3D> 
</Viewport3D> 

,基本上每3米GeometryModel3D的都有自己的网,转换等..

当我在Viewport3D上进行测试时,我得到的所有内容都是在我点击某些东西时点击的3D空间中的点。我真正追求的是在三维空间中击中的网格点(不是网格上的单个点,而是Point3D)。

我的目标是在用户点击的确切位置向点击网格添加一个新的材质。我不能这样做,如果我只能访问相对于Viewport3D的Point3D(因为网格中的所有变换等...)

一个示例可能是m1几何是类似矩形的形状,一些轻微的旋转,并转化为Y轴,因此它在屏幕的顶部。

当我点击网的最底部,我想获得的XY(这里不需要Z)点相对于本地坐标网格的空间......

我希望所有品牌感,并感谢任何帮助,您可以给

马克

+0

矩阵的逆操作也许可以帮助? – Makubex 2012-09-26 16:26:42

回答

0

我想你所描述的实际上是两件事情:

  1. 射线投影:给出一喜在二维表示(即屏幕)上的t点,从该点投射一道光线进入你的场景。这可以称为“未投影”,因为它依赖于反转原始屏幕变换矩阵并选择一些最小和最大“深度”值。

  2. 射线/网格命中交叉点:给定一个射线和一个网格,找到它们相遇的地方。稍微广义的变体是雷/圈相交Ray-Sphere Intersection

退房这家伙的博客中,他拥有所有我认为你需要的信息: Daniel Lehenbauer's Blog