2009-12-13 57 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