[英]OpenGL ES - get 2D pixel coordinate from camera position
我正在使用OpenGL ES(IOS)和OpenCV。 我想知道是否可以從GLKMatrix4相機位置獲取2D像素坐標嗎?
確實,我在OpenGL中顯示了一個特定的3D對象,該對象只有它的大小和它的相機姿勢,我想將其轉換為OpenCV參考坐標,即2D像素。
更准確地說,我有一個IOS應用程序,並且可以傳輸相機顏色。 此流與OpenGL一起顯示在我的Ipad上。 在此顯示器上,我有一個特定的疊加層,即3D對象。 同時,我對OpenCV進行了一些檢測。 現在,我要通過3D對象將幀中的OpenCV(這是一個矩形繪制)與OpenCV關聯起來,但是對於這個對象,我只有其攝像機位置和大小。
我知道4x4照相機姿勢的內容,但是沒有找到有關如何將其轉換為2D坐標的任何信息。
簡而言之:輸入:一個2D矩形(僅獲取2D坐標)和一個3D對象(僅獲取其相機位置)
有辦法嗎? 請你幫助我好嗎 ?
謝謝
要獲得向量在屏幕上的投影,只需要將其乘以openGL中使用的矩陣即可。 第三個坐標被簡單地丟棄,僅用於深度緩沖區(還有插值,但這在這里實際上並不重要)。
在openGL中,您將通過將其與矩陣相乘得到的繪制像素的坐標將被標准化為所有軸上[-1,1]
范圍內的坐標系。 這意味着位於屏幕/視圖最左上角的像素將具有坐標(-1,1)
,右上角(1,1)
,中心(0,0)
...現在對應於緩沖區像素,此值必須反規范化:
您需要具有緩沖區的width
和height
以便像素位置為bufferX = ((x+1)/2.0) * width
和bufferY = ((y+1)/2.0) * height
。 結果是浮動值,因此您需要將它們四舍五入為整數或進行類型轉換。 我不知道這是由openGL完成的。
既然你已經使用GLKit類型和數學,試着功能GLKMathProject
從3D模型空間轉換到視口(窗口/像素2D)空間, GLKMathUnproject
如果你還需要周圍的其他方法。 您將需要(大概)傳遞給着色器的(相同)模型視圖和投影矩陣,以繪制場景。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.