0

假设我想画以下几行:

   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?

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

谢谢你。

4

1 回答 1

1

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

本质上,glFrustum 是一个创建某种投影变换的函数,即创建透视图的函数。我建议阅读我写的另一个答案,它解释了 OpenGL 的转换阶段。

在那个答案中,我写道:

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

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

于 2012-11-05T16:28:28.513 回答