OpenGL近裁剪面

5
我正在为计算机图形学课程制作交互场景。我已经设置了一个程序,可以生成彩色立方体,并让我用键盘旋转它们。但是,它们被我的摄像机近裁剪平面切开了: Color cubes being clipped 我尝试使用gluPerspective,但OpenGL文档没有给出任何使用示例。我在网上找到一个示例程序中使用了它,并且部分复制了他们的代码:
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective( 65, 1, 0.01, 100 );
glMatrixMode(GL_MODELVIEW);

你有什么想法吗?

更新: 如下面的评论所建议的,我尝试使用glFrustum代替,代码如下:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
glFrustum( -0.5, 0.5, -0.5, 0.5, 0.1, 100 );
glMatrixMode(GL_MODELVIEW);

再次尝试后,结果没有任何区别。可能是我没有正确推动生成的矩阵或者其他原因吗?


1
你正在学习计算机图形学课程,涉及透视投影,但他们没有讲到近裁剪平面? - Nicol Bolas
1
也许你需要将物体从相机中移动得更远一些。现在它们似乎比0.0更靠近。 - Kromster
按照Krom所说的做,或者调整你的视锥体。 - CStreel
我将立方体从相机移动了一个单位,现在当它们旋转时,它们被近裁剪面和远裁剪面都裁剪了。我会研究视锥体。 - Nick
1
如果您可以在不被认为是作弊的情况下发布您的渲染代码,那就这样做吧。如果您使用gluPerspective和glFrustum时没有任何区别,那么可能还有其他问题。如果两个平面都在剪切对象,则它们相对于剪切空间必须非常大。您的远平面距离眼睛100个单位。方块有多大? - JCooper
1个回答

2

也许您需要将对象与相机的距离稍微拉远一些。现在它们似乎比0.0还要靠近。

考虑到您的更新:“我将立方体整个移开了一个单位,现在当它们旋转时,它们被近裁剪面和远裁剪面都裁剪了”,您的立方体可能太大了,超出了您的裁剪深度(100-0.1)。将立方体从相机处移动50个单位,并将裁剪面设置为0.1..1000,以确保所有内容都适合。

如果问题仍然存在,我们可能需要查看您的矩阵代码。


我的立方体是由以下点数组构建的:point4 vertices[8] = { point4( -0.5, -0.5, 0.5, 1.0 ), point4( -0.5, 0.5, 0.5, 1.0 ), point4( 0.5, 0.5, 0.5, 1.0 ), point4( 0.5, -0.5, 0.5, 1.0 ), point4( -0.5, -0.5, -0.5, 1.0 ), point4( -0.5, 0.5, -0.5, 1.0 ), point4( 0.5, 0.5, -0.5, 1.0 ), point4( 0.5, -0.5, -0.5, 1.0 ) };它们分别位于(-0.75, 0, 0)和(0.75, 0, 0),在我将它们从相机远离后,它们分别位于(-0.75, 0, 1)和(0.75, 0, 1)。 - Nick
1
你知道当一个立方体位于-1位置并旋转45度时,它的边缘距离中心点为1.41,应该被裁剪吗? - Kromster
我知道图片的一部分会超出相机视野,需要进行裁剪,但是它太明显了,你可以看到立方体内部。更不用说远裁剪平面也在切断物体。如果我想要一个真实的场景,它看起来并不好。我尝试改变glFrustum或gluPerspective的调用,但似乎没有任何变化,所以我认为我没有正确使用它们。你如何使用它们? - Nick

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接