2010-08-15 127 views
1

我正在使用3D引擎,需要在3D世界空間和2D屏幕空間之間使用透視投影進行翻譯,因此我可以在3D空間中的物品上放置2D文本標籤。 我見過這個問題的各種答案的幾個帖子,但他們似乎使用我沒有的組件。世界空間屏幕空間(透視投影)

我有一個Camera對象,只能設置它的當前位置和lookat位置,它不能滾動。相機沿着路徑移動,某個目標對象可能會出現在視圖中然後消失。 我只有下面的值

  • LOOKAT位置
  • 位置
  • 垂直FOV
  • Ž遠
  • Ž鄰近
  • 和明顯的目標對象的位置。

任何人都可以請給我一個算法,只使用這些組件來做到這一點嗎?

非常感謝。

回答

8

所有圖形引擎都使用矩陣在不同的協調系統之間進行轉換。的確,OpenGL和DirectX使用它們,因爲它們是標準的方式。

攝像機通常使用你有參數構建矩陣:

  • 視圖矩陣(變換世界位置的方式你看它從攝像機位置)時,它使用LOOKAT位置和照相機的位置(也是向上的向量,通常是0,1,0)

  • 投影矩陣(從3D座標轉換到2D座標),它使用fov,near,far和aspect。

你可以找到如何構建在互聯網搜索的矩陣爲創建它們的OpenGL函數信息:

  • gluLookat創建viewmatrix

  • gluPerspective:創建投影矩陣

但我無法想象一個引擎th在不允許你得到這些矩陣,因爲我可以確保你在哪裏,引擎正在使用它。

一旦你有了這些矩陣,你將它們相乘,得到viewprojeciton矩陣。這個矩陣從世界座標變換到屏幕座標。所以,只需將矩陣乘以你想知道的位置(以向量4格式,即4º分量1.0)。

但是等等,結果將會是齊次座標,您需要將生成的向量的X,Y,Z除以W,然後在Normalized屏幕座標中有位置(0代表中心,0.5代表右邊等)。

從這裏很容易變換乘以寬度和高度。

祝你好運:)

P.S:當您使用3D工作,它是非常重要的,瞭解三個矩陣(模型,視圖和投影),否則你會跌倒每次。

0

所以

你有沒有擡頭「廣告牌」技術,我可以把2D文字標籤在三維空間的物品 ?有時候,只要知道正確的術語就可以根據需要進行搜索。這是指總是面向相機的多邊形(通常是矩形),而不管相機的位置或方向如何。

相關問題