2012-10-17 25 views
9

如何將gluPerspective函數轉換爲glFrustum?我嘗試過使用這個公式,但沒有運氣,因爲它沒有像gluPerspective一樣產生相同的圖像。替代gluPerspective(與glFrustrum)

頂部= TAN(FOV * 3.14159/360.0)*鄰近 底部= -top

左=方面*底部 右=方面*頂部

我似乎無法正確轉換我的視野。比如說,如果我的FOV是45,那麼Frustum呼叫中的「頂級」參數是什麼?

+0

如果您希望'fov * 3.14159/360.0'將度數轉換爲弧度,則不起作用。要從度數轉換爲弧度,請使用:'fov * 3.14159/180.0'。 – Ryan

+0

謝謝瑞恩我用180而不是360它看起來好多了,但圖片仍然看起來更遠,它本來是 – DorkMonstuh

+0

請參閱tiguero的答案中的鏈接,它解釋了爲什麼在這種情況下180可以減少到360。 – Ryan

回答

23

在這裏,我們去 - 你可以用下面的方法爲更換gluPerspective的:

void perspectiveGL(GLdouble fovY, GLdouble aspect, GLdouble zNear, GLdouble zFar) 
{ 
    const GLdouble pi = 3.1415926535897932384626433832795; 
    GLdouble fW, fH; 

    //fH = tan((fovY/2)/180 * pi) * zNear; 
    fH = tan(fovY/360 * pi) * zNear; 
    fW = fH * aspect; 

    glFrustum(-fW, fW, -fH, fH, zNear, zFar); 
} 

你可以找到的代碼nehe頁面上的一些更多的解釋。