2012-10-17 31 views
9

Jak przekonwertowałbyś funkcję gluperspektywiczną na glFrustum? Próbowałem użyć tego równania, ale nie miałem szczęścia, ponieważ nie generowało ono takiego samego obrazu, jak w przypadku gluperspektywy.Zamiennik dla gluPerspektywa (z glFrustrum)

top = tan (FOV * 3,14159/360,0) * blisko dole = -top

lewo = kształtu * dolny prawo = aspekt * top

I nie może wydawać się przekonwertuj poprawnie moje pole widzenia. Powiedzmy, na przykład, jeśli moje FOV wynosi 45, jaki byłby "najwyższy" parametr w wywołaniu Frustum?

+0

Jeśli spodziewasz się, że "fov * 3.14159/360.0" zmieni się ze stopni na radiany, nie zadziała. Aby przekonwertować stopnie na radiany, użyj: 'fov * 3.14159/180.0'. – Ryan

+0

dziękuję Ryan I użył 180 zamiast 360 wydawało się o wiele lepiej, ale zdjęcie nadal wydawało się być dalej, że pierwotnie było – DorkMonstuh

+0

Zobacz link w odpowiedzi tiguero, wyjaśnia, dlaczego 180 może być zmniejszona do 360 dla tego przypadku. – Ryan

Odpowiedz

23

Zaczynamy - można wykorzystać następujące metody jako zastępstwo 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); 
} 

Można znaleźć więcej wyjaśnienie kodu na stronie nehe.