Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/150.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ OpenGL的归一化坐标_C++_Algorithm_Opengl_3d_Frustum - Fatal编程技术网

C++ OpenGL的归一化坐标

C++ OpenGL的归一化坐标,c++,algorithm,opengl,3d,frustum,C++,Algorithm,Opengl,3d,Frustum,我试图通过使用glFrustum限制查看量来剪辑屏幕上的图像。在Glfrustum的官方文档中,提到左、右、上、下、近、远是剪裁的坐标。我认为它们是屏幕坐标,并尝试: glFrustum(100, 924, 100, 668, 3, 1000); 上面的内容没有在屏幕上显示任何内容。所以,我只是在某处查找,看到一些代码如下(但为什么这些坐标是负数?) 我使用了excat同样的东西,开始在屏幕上显示部分图像。随后,我在树上摆弄附近的坐标,注意到查看音量是如何变化的 glFrustum(-10,1

我试图通过使用
glFrustum
限制查看量来剪辑屏幕上的图像。在
Glfrustum
的官方文档中,提到
左、右、上、下、近、远
是剪裁的坐标。我认为它们是屏幕坐标,并尝试:

glFrustum(100, 924, 100, 668, 3, 1000);
上面的内容没有在屏幕上显示任何内容。所以,我只是在某处查找,看到一些代码如下(但为什么这些坐标是负数?)

我使用了excat同样的东西,开始在屏幕上显示部分图像。随后,我在树上摆弄
附近的坐标,注意到查看音量是如何变化的

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]
(例如)和人们谈论标准化范围内的计算的地方使用的值。为什么计算
左、右、下、上、近、远
对标准化值很重要(近和远也包括在标准化值中?)?也可以使用屏幕坐标中的值执行相同的操作吗?

这些参数不在您认为的坐标系(空间)中。我为您找到了这个:

这些参数不在您认为的坐标系(空间)中。我为你找到了这个:

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

首先,glFrustum独立于您的屏幕分辨率

此函数定义一个将在其中绘制场景的体积,也就是说,抛出此体积之外的所有屏幕元素都将被忽略/剪切。 glFrustum的坐标是相对于场景的,而不是相对于屏幕的

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

所有这些都给了我屏幕上相同的图像输出

不完全是这样,如果您的3D模型靠近POV(camara),则示例2将在示例3不切割的地方进行切割。但当您按“左”、“上”、“下”和“右”的比例增加/减少“近”距离时,结果是相似的

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

首先,glFrustum独立于您的屏幕分辨率

此函数定义一个将在其中绘制场景的体积,也就是说,抛出此体积之外的所有屏幕元素都将被忽略/剪切。 glFrustum的坐标是相对于场景的,而不是相对于屏幕的

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

所有这些都给了我屏幕上相同的图像输出

不完全是这样,如果您的3D模型靠近POV(camara),则示例2将在示例3不切割的地方进行切割。但当您按“左”、“上”、“下”和“右”的比例增加/减少“近”距离时,结果是相似的

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(-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);