2012-06-21 56 views
3

我有獲取設備的後置攝像頭,它返回度的水平和垂直角,像這樣的FOV角度的程序:轉換FOV角度透視投影參數

54.8 
42.5 

有一種簡單的轉換爲適用於獲得正確的「左,右,底部,頂部」參數傳遞到OpenGL的Matrix.frustrumM()?

Matrix.frustumM(mProjectionMatrix, 0, left, right, bottom, top, near, far); 

我OpenGL的疊加形狀到CameraView,並希望確保他們正確繪製相對於攝像頭輸入真實世界的物體,無論相機的FOV的所有設備。

非常感謝!


編輯:這裏有一個解決方案,萬一有人遇到這樣的:

private float[] perspectiveM(float fovY, float fovX, float zNear, float zFar) 
{ 
    float[] projMatrix = new float[16]; 
    float aspect = fovX/fovY; 
    fovY = (float) ((fovY /180.0) * Math.PI); // degrees to radians 
    float g = (float) (1/Math.tan(fovY/2)); 

    for(int i=0; i<16; i++) { 
     switch (i) { 

     case 0: 
      projMatrix[i] = g/aspect; 
      break; 
     case 5: 
      projMatrix[i] = g; 
      break; 
     case 10: 
      projMatrix[i] = (zFar + zNear)/(zNear - zFar); 
      break; 
     case 11: 
      projMatrix[i] = -1.0f; 
      break; 
     case 14: 
      projMatrix[i] = (2 * zFar * zNear)/(zNear - zFar); 
      break; 
     default: 
      projMatrix[i] = 0.0f; 
     } 
    } 

    return projMatrix; 
} 

然後再將結果返回到您的投影矩陣。

+0

將Matrix.perspectiveM()你想要什麼? – Tim

+0

是的,但這只是在API級別14實施,我瞄準了10. – Joey

+0

檢查此網站了解預測投影的概念http://www.mathdisk.com/pub/safi/worksheets/Perspective_Projection – 2012-07-08 02:10:41

回答

2

我沒有意識到perspectiveM僅限於某個API級別,但您可以輕鬆地自行重新創建該功能。這些公式位於gluPerspective的手冊頁上,其工作方式相同。

你可以只建浮法矩陣自己使用這些公式:

http://www.opengl.org/sdk/docs/man/xhtml/gluPerspective.xml

+0

謝謝,這是我最終做了什麼。 – Joey

+0

更新鏈接 –