2011-04-10 216 views
1

我使用OpenGL和C++來製作遊戲。現在,我想知道如何將3D座標轉換爲2D位置,例如:在3D模型的頭部繪製2D健康條,或沿着這些線條繪製2D健康條。 xD從3D轉換到2D座標問題

所以無論如何,即時通訊想知道我將如何設置它可以在SFML中使用它。現在即時尋找一些信息,但我完全不明白的方法...

Basicaly,即時通訊,詢問如何將我讓3D OpenGL的座標轉換爲二維座標上使用SFML

屏幕

IM也想知道我是怎麼會將2D座標轉換回3D,所以我也知道這一點。

也有一些示例代碼將是很好的,只是讓我得到更好的畫面

感謝閱讀

-Molma

+0

感謝您的快速答案傢伙:D ima看看這些並研究這些。再次感謝 – Molmasepic 2011-04-10 19:21:50

回答

2

由於您使用OpenGL的,我建議gluProject映射從3D到2D和gluUnProject從2D到3D映射(請注意@ ChrisF對未投影的評論)。儘管我必須承認,我沒有使用OpenGL的實際經驗,但我只知道你想要的術語和搜索結果。 :)

+1

請記住,將2D點「解開」到3D空間中會給你一條線。這將從眼睛,通過點到後面的裁剪平面。 – ChrisF 2011-04-10 19:19:54

+0

@ChrisF:你說得對,我會提示你的評論。 – Xeo 2011-04-10 19:21:16

1

This short text解釋3D座標的2D投影的基礎知識。另一種方式更困難一點,因爲你只有兩個已知的值(二維座標),而這還不夠完全提取三個座標。你可以得到的最好的是一條線(從觀察者開始,穿過屏幕上的點並延伸到無窮遠處),3D點基本上可以位於屏幕後面的任何位置,但是如果你知道一些額外的東西,攝像機或者你知道二維座標的物體位置的一部分,你可以確定3個座標。

1

繪製健康條的常用方法就是將一些邊界體(邊界框,邊界。球體等)或定位點到屏幕空間這是很容易的,因爲你只需要遵循的OpenGL轉換管道:

clip_position = Projection_Matrix * Modelview_Matrix * vertex_position 
viewport_position.{x,y} = viewport.{x,y} + viewport.{width,height} * (0.5 + clip_position.{x,y}/2) 

2D到3D是不可能沒有提供額外的信息。

1

你只需要做和OpenGL一樣的座標變換。這通常涉及以下步驟:

  1. 將其乘以翻譯矩陣(即相機矩陣)。這使您的3d座標在屏幕導向座標系統中乘以投影矩陣。這將投影座標到屏幕

想必你有這些矩陣,因爲你必須加載它們在OpenGL,但你也可以問他們。