2013-05-09 137 views
1

我试图通过使用glFrustum限制查看量来剪辑屏幕上的图像。在Glfrustum的官方文档中提到,left, right, top, bottom, near, far是裁剪的坐标。我认为他们是屏幕坐标,并试图做到:OpenGL的标准化坐标

glFrustum(100, 924, 100, 668, 3, 1000); 

上面没有显示任何东西给我在屏幕上。所以,我只是看着某处,看到一些代码如下(但为什么这些坐标负):

glFrustum(-1, 1, -1, 1, 0.5, 1000); 

我用excat同样的事情,并开始在屏幕上获得图像的某些部分。随后,我开始拨弄near的坐标,并注意观看音量如何变化。

glFrustum(-10,10,-10,10,10,1000); 
glFrustum(-100,100,-100,100,100,1000); 
glFrustum(-0.5,0.5,-0.5,0.5,0.5,1000); 

所有上面的方法给图像用相同的输出到我在屏幕上。但是我观察到大多数使用glFrustum的地方,我注意到这些值是从[-1,1](如here)和人们在规范化的范围内讨论计算的地方使用的。为什么在归一化值方面对left, right, bottom, top, near, far的计算很重要(近远还包括在归一化值中?)?是否可以使用屏幕坐标中的值执行相同的操作?

回答

2

首先,glFrustum是独立于你的屏幕分辨率。

这个函数定义了一个场景将被绘制的体积,也就是说,抛出这个体积的你的screne的所有元素将被忽略/切割。 glFrustum的Coordenates与您的场景相关,而不是您的屏幕。

enter image description here

在考虑采取对于正确表示,其他参数必须被正确地像场景旋转/平移配置等

glFrustum(-10,10,-10,10,10,1000); 
glFrustum(-100,100,-100,100,100,1000); 
glFrustum(-0.5,0.5,-0.5,0.5,0.5,1000); 

所有上述均给出相同的输出我在屏幕上的图像

不完全如果你的3D模型接近POV(camara) ,例2将切断它,例3不会。但是,当您按“左”,“顶部”,“底部”和“右侧”的比例增加/减少“近”距离时,结果类似。