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