2

我试图通过限制查看音量来在我的屏幕上剪辑图像glFrustum。在 的官方文档中Glfrustum,提到 是left, right, top, bottom, near, far剪切的坐标。我认为它们是屏幕坐标并尝试这样做:

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](例如这里)和人们谈论标准化范围内的计算。为什么要根据归一化值计算left, right, bottom, top, near, far重要的(近和远也包括在归一化值中?)?是否也可以使用屏幕坐标中的值执行相同的操作?

4

2 回答 2

4

注意:此问题和答案仅对较旧的(版本 3 之前)OpenGL 有效。

首先,glFrustum 与您的屏幕分辨率无关。

此函数定义将在其中绘制场景的体积,也就是说,所有超出该体积的屏幕元素都将被忽略/剪切。glFrustum 的坐标与您的场景相关,而不是与您的屏幕相关。

在此处输入图像描述

考虑到要正确表示,必须正确配置其他参数,例如场景旋转/平移等。

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 没有的位置剪切它。但是,当您与“左”、“上”、“下”和“右”成比例地增加/减少“近”距离时,结果是相似的。

于 2013-05-09T10:16:57.650 回答
0

这些参数不在您认为的坐标系(空间)中。我为你找到了这个:http: //www.matrix44.net/cms/notes/opengl-3d-graphics/coordinate-systems-in-opengl

于 2013-05-09T10:16:16.650 回答