2012-11-05 33 views
0

假设我想得出以下线:glViewport和glFrustum之间的连接究竟是什么?

const GLfloat lineX[] = { 
     FrustumData.left * FrustumData.ratio , (FrustumData.top + FrustumData.bottom)/2 * FrustumData.ratio, FrustumData.zFar, //point A 
     FrustumData.right * FrustumData.ratio , (FrustumData.top + FrustumData.bottom)/2 * FrustumData.ratio, FrustumData.zFar //point B 
    }; 
    const GLfloat lineY[] = { 
     (FrustumData.left + FrustumData.right)/2 * FrustumData.ratio , FrustumData.bottom * FrustumData.ratio, FrustumData.zFar, //point A 
     (FrustumData.left + FrustumData.right)/2 * FrustumData.ratio , FrustumData.top * FrustumData.ratio, FrustumData.zFar //point B 
    }; 
    const GLfloat lineZ[] = { 
     (FrustumData.left + FrustumData.right)/2 * FrustumData.ratio, (FrustumData.top + FrustumData.bottom)/2 * FrustumData.ratio, FrustumData.zFar, //point A 
     (FrustumData.left + FrustumData.right)/2 , (FrustumData.top + FrustumData.bottom)/2 , FrustumData.zNear //point B 
    }; 

其中比= zFar/zNear和其他一切是glFrustum参数。

我不应该看到任何选择Frustum参数的行或它取决于glViewport?

因为我现在没有看到他们,我不明白为什么。

谢谢。

回答

1

这两者之间没有直接联系。但它们都对屏幕上的显示位置有直接的影响。

本质glFrustum是创建某种,即一个,创建透视的投影变换的函数。我建议你阅读另一answer written by me, which explains the transformation stages of OpenGL.

在这个问题的答案我写道:

这种转变映射眼空间中特定卷具有一定界限,其几何形状被裁剪部分的体积。

glFrustum正在定义这样一个卷。它看起来像一个尖端切割(截锥体)的金字塔,尖端位于眼睛空间的原点,“切割”是近剪切平面,金字塔的基础是远剪切平面。参数左侧,右侧,底部顶部定义眼睛空间单元中的近剪裁平面的范围。