假设我想绘制以下几行:
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?
因为我现在没有看到它们,我无法理解为什么。
谢谢。
答案 0 :(得分:1)
两者之间没有直接联系。但它们都会直接影响屏幕上显示的内容。
基本上,glFrustum是一种创建某种类型的投影转换的函数,即一种创建透视的转换。我建议您阅读另一个answer written by me, which explains the transformation stages of OpenGL.
在那个答案中我写道:
此变换将眼睛空间中的一些体积映射到具有特定边界的特定体积,几何体将被剪切到该体积。
glFrustum定义了这样一个卷。它看起来像一个金字塔,其尖端切割为(平截头体),其中尖端位于眼睛空间的原点,“切割”是近剪裁平面,金字塔的基部是远剪裁平面。参数 left,right,bottom 和 top 定义了眼睛空间单位中近剪裁平面的范围。