2009-12-26 40 views
2

嘿傢伙,我正在使用wpf 3d,我現在正在編寫一個程序,它會在屏幕上從左到右創建3d塊,但是我需要知道我的界限是在X上,Y ie(-x -0)(0-x +),所以我知道什麼時候開始另一排瓷磚。我最初的想法是試圖找出一個複雜的算法,從像素到屏幕座標,但似乎應該有一個更簡單的方法。Wpf視口座標

回答

3

如果我正確理解你,你想知道通過你的Viewport3DVisual可以看到什麼範圍的3D座標。

此問題沒有單一答案。想知道爲什麼,想象你坐在廚房的餐桌上吃早飯,碰巧看窗外。你可以看到什麼水平範圍?那麼,你可以看到距離遠處五英里的藍山,但只有三十英尺的後圍。換句話說,可視區域不是矩形棱鏡而是金字塔。

底線是,您必須先指定所涉及的距離,然後才能通過視口顯示水平和垂直範圍。

一旦指定的距離,這裏是如何將視口中的3D點在給定的平面地圖,而自己做所有的計算:

  1. 創建一個單獨的Viewport3dVisual模型,使用相同的相機設置但是隻有一個由所需距離的單個大矩形組成的模型。
  2. 使用命中測試來測試視口的每個角落,接收命中的測試結果回調。
  3. 從命中測試結果中提取矩形上的座標,並將它們用於計算。

這種技術的優點是可以在相機可能面對的任何地方可靠工作,甚至適用於動畫相機等。注意:如果我誤解了這個問題,並且您只是想要在2D中佈置包含3D內容的圖塊的行,那麼您可以通過簡單地使用WrapPanel來獲得您描述的效果。如果要進行數據綁定,請使用帶有WrapPanel的ItemPanelTemplate的ItemsControl或ListBox。