2009-11-08 75 views
2

在3D場景中,我們經常需要在場景中移動(旋轉,平移)的3D對象旁邊應用標籤(小textelements或圖標)。這些標籤應該始終朝向相機,但仍然隨物體一起移動。我相信這種技術叫做廣告牌。WPF 3D廣告牌

如果標籤始終保持相同的大小 - 無論相關對象距離多遠,額外的一個很酷的功能就是如此。所以標籤似乎生活在2D屏幕空間中,而不是在3D場景圖中。

有沒有人想出一個聰明的方式如何在WPF中做到這一點?

回答

1

對於廣告牌,您需要確保臉部正常指向相機。該算法是面法線與視線方向之間的點積應爲-1(減1)。

我有一些舊的C代碼可以做到這一點,但它可能不是特別有用。

爲了保持對象具有相同的尺寸,您需要計算出屏幕尺寸,然後應用變換以保持您希望的恆定尺寸。

但是,如果您希望對象看起來好像處於2D空間中那樣,爲什麼不將它繪製在2D疊加層中呢?這將同時解決廣告牌和縮放問題。您計算出標籤的屏幕位置,然後使用2D繪圖功能。

+0

我可以在2D覆蓋圖中繪製它,但是如何確定標籤的位置?當關聯的3D對象移動時,標籤需要隨之移動。我想它invloves計算投影矩陣或什麼的。 – bitbonk 2009-11-08 18:47:39

+0

我或多或少地意識到所有這些背後的數學問題,如果我努力嘗試,我甚至可以計算出正確的矩陣,我需要將它轉換爲視圖。但我真的希望我不必自己來做這件事:)另外我不太清楚我是如何將所有這些融入到WPF Viewport3D場景中的。 – bitbonk 2009-11-08 18:51:24

+0

是的,你需要參與投影矩陣。我沒有用WPF做過3D,所以我不太想說說你需要什麼方法和/或屬性。 – ChrisF 2009-11-08 19:19:45