Fr position的位置,起源和挑选
问题描述:
我正在写一个简单的程序,使用透视投影,我有一堆在我的场景中绘制的对象。为透视投影我使用以下代码:Fr position的位置,起源和挑选
glMatrixMode(GL_PROJECTION);
glLoadIdentity();
gluLookAt(eyePosX, eyePosY, eyePosZ, centerPosX, centerPosY, centerPosZ, 0.0, 1.0, 0.0);
glFrustum(frustumLeft,frustumRight,frustumBottom,frustumTop,frustumNear,frustumFar);
当我有具有一定绘制的对象上内不进入截头锥体的X轴偏移,该目的STIL绘制,但是细长的,而不是被平截头体剔除。 XYZ空间中的8个点相对于eyePosX/Y/Z和frustumLeft/Right/Bottom/Top/Near/Far的坐标是多少? 如何告诉OpenGL执行不在视锥内的对象的剔除?
答
对于透视投影,我用下面的代码:
有两种可能性。首先,你真的不想要做这个代码。第二个是你做的意思,但不完全明白你所做的。
现在我们来介绍第一个。查表矩阵绝对不应该在内的GL_PROJECTION
矩阵内部。此外,在投影矩阵之后,查看矩阵总是来自。这些应该永远是真的除非你正在做一些特别的事情。
这导致第二。如果你真的打算旋转和抵消后投影空间,那么你不能指望几何图形被剔除。为什么?
因为OpenGL不做截锥体剔除。它会针对您提供的任何后处理顶点位置进行剔除。如果您旋转视锥外的视图,那么这就是绘制的。 OpenGL不绘制不可见的东西;如果您更改投影后视图,以便现在看不到的内容可见,那么您已经更改了内容和不可见内容。
我对OpenGL有点新,这个视角的东西很混乱:glFrustum需要6个参数来定义平截头的6个平面,但是哪个是原点的坐标(金字塔的顶点),以及如何可以我指定了这些坐标(我认为函数中的glLook定义了原点)?为什么它不在GL_PROJECTION矩阵中? – 2012-03-04 22:50:43