裁剪平面附近的 OpenGL

Posted

技术标签:

【中文标题】裁剪平面附近的 OpenGL【英文标题】:OpenGL Near Clip Plane 【发布时间】:2012-10-08 11:30:06 【问题描述】:

我正在为计算机图形课程制作交互式场景。我已经设置了一个程序来生成颜色立方体,然后让我用键盘旋转它们。但是它们被我相机的近剪辑平面切开:

我尝试使用 gluPerspective,但 OpenGL 文档没有给出任何使用示例。我发现它被用于在线示例程序中,并半复制了他们的代码:

glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluPerspective( 65, 1, 0.01, 100 );
glMatrixMode(GL_MODELVIEW);

有什么想法吗?

更新: 正如下面的 cmets 中所建议的,我尝试使用 glFrustum,代码如下:

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

同样,没有区别。我没有正确推送结果矩阵吗?

【问题讨论】:

您正在学习涉及透视投影的计算图形课程,但他们没有谈到近裁剪平面? 也许你需要将你的对象移动到离相机更远一点的地方。现在看来他们离0.0更近了 按照克罗姆所说的去做或调整你的视锥体 我将立方体从相机移开一整个单位,现在当它们旋转时,它们会被近端和远端剪裁平面剪裁。我会看看视锥体 你应该发布你的渲染代码,如果你可以这样做而不被认为是在你的班级作弊。如果您对 gluPerspective 的调用与您使用 glFrustum 时没有区别,那么可能还有其他问题。如果两个平面都在剪裁您的对象,那么它们相对于您的剪裁空间一定很大。您的远平面距离眼睛 100 个单位。立方体有多大? 【参考方案1】:

也许您需要将对象移离相机稍远一点。现在似乎它们比 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) 在我将它们移离相机更远之后 你知道当一个立方体被定位在 -1 并旋转 45 度时,它的边缘距离它的中心 1.41 度并且应该被剪裁? 我知道图片的一部分将在镜头外,应该被剪掉,但它是如此明显,你可以看到立方体的内部。更不用说远剪辑平面也在切断东西。如果我想有一个真实的场景,它不会看起来很好。我在调用 glFrustum 或 gluPerspective 时所做的任何更改似乎都没有改变任何东西,所以我认为我没有正确使用它们。你如何使用它们?

以上是关于裁剪平面附近的 OpenGL的主要内容,如果未能解决你的问题,请参考以下文章

斜视截头体深度投影和裁剪 (Eric Lengyel)

VTK: 三维体数据的平面裁剪

VTK 平面裁剪

基于局部轴的平面局部裁剪

如何在三个js中将多个纹理裁剪为多边形

OPenGLopengl 64位 配置