glViewport和glFrustum之间究竟有什么联系?

时间:2012-11-05 16:17:36

标签: opengl opengl-es opengl-es-1.1 frustum

假设我想绘制以下几行:

   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
    };

其中ratio = zFar / zNear,其他一切都是glFrustum参数。

我不应该看到任何选择的Frustum参数的行,或者它在某种程度上取决于glViewport?

因为我现在没有看到它们,我无法理解为什么。

谢谢。

1 个答案:

答案 0 :(得分:1)

两者之间没有直接联系。但它们都会直接影响屏幕上显示的内容。

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

在那个答案中我写道:

  

此变换将眼睛空间中的一些体积映射到具有特定边界的特定体积,几何体将被剪切到该体积。

glFrustum定义了这样一个卷。它看起来像一个金字塔,其尖端切割为(平截头体),其中尖端位于眼睛空间的原点,“切割”是近剪裁平面,金字塔的基部是远剪裁平面。参数 left,right,bottom top 定义了眼睛空间单位中近剪裁平面的范围。